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に飛ばされる。。
で、調べていたら、以下の記事を見つけまして、
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
こんな具合に設定したら、ちゃんと動きました。万歳!