activeadmin
Rails5

ActiveAdminでログイン後に遷移するページをモデルごとに分けたい

More than 1 year has passed since last update.

ActiveAdminでAdminUserとUserのようにユーザ管理を複数用意している場合、
ログイン後に遷移するトップページを分けたい時があると思います。

AdminUserでログインしたら => AdminUser向けのDashboard
Userでログインしたら => User向けのDashboard

ActiveAdminのドキュメントを読むと、

  # == Root
  #
  # Set the action to call for the root path. You can set different
  # roots for each namespace.
  #
  # Default:
  # config.root_to = 'dashboard#index'

なんて記述があるので、namespaceごとにroot_toを設定すればOKなのかな?と想像して

  config.namespace :users do |user|
    user.site_title = "ほげほげ"
    user.authentication_method = :authenticate_user!
    user.current_user_method = :current_user
    user.logout_link_path = :destroy_user_session_path
    user.root_to = '/users/dashboard#index'
  end

  config.namespace :admin do |admin|
    admin.site_title = "ほげほげ管理者画面"
    admin.authentication_method = :authenticate_admin_user!
    admin.current_user_method = :current_admin_user
    admin.logout_link_path = :destroy_admin_user_session_path
    admin.root_to = '/admin/dashboard#index'
  end

なんてやってみたのですが、全く変わらず。userでログインしてもadminに飛ばされる。。

で、調べていたら、以下の記事を見つけまして、

https://stackoverflow.com/questions/23731590/redirect-active-admin-login-to-devise-login

config/initializer/active_admin_force_redirection.rb
ActiveAdmin::Devise::SessionsController.class_eval do
  def after_sign_in_path_for(resource)
    if resource.is_a?(AdminUser)
      admin_root_path
    else
      users_root_path
    end
  end
end

こんな具合に設定したら、ちゃんと動きました。万歳!