6

我有一个应用程序需要三种用户类型(用户、代理、管理员)并登录并需要不同的设计模块。

                        User    AgentAdmin  AdminUser

confirmable              Yes        Yes         No
lockable                 Yes        Yes         No
timeoutable               No        Yes         Yes
Omniauthable             Yes        No          No
database_authenticatable Yes        Yes         Yes
recoverable              Yes        Yes         No
rememberable             Yes        Yes         No
trackable                Yes        Yes         Yes
validatable              Yes        Yes         Yes

此外,这些用户可能具有基于其类型的附加列。所以,我想根据它们的类型创建不同的表。

根据我的要求,我决定使用不同的命名空间(admin for AgentAdmin,agent for )AdminUser处理ActiveAdmin 。我已经配置了,并为这两个命名空间如下。AdminUserAgentAdminauthentication_methodcurrent_user_methodlogout_link_path

config.load_paths = [File.join(Rails.root,'app','admin'), File.join(Rails.root,'app','agent')]

config.namespace :admin do |admin|
  admin.authentication_method = :authenticate_admin_user!
  admin.current_user_method = :current_admin_user
  admin.logout_link_path = :destroy_admin_user_session_path
end

config.namespace :agent do |agent|
  agent.authentication_method = :authenticate_agent_admin!
  agent.current_user_method = :current_agent_admin
  agent.logout_link_path = :destroy_agent_admin_session_path
end

我的代码中有以下代码routes.rb

devise_for :agent_admins, ActiveAdmin::Devise.config
devise_for :admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)

这只会为admin_users. 如果我config.default_namespace = :agent在 active_admin.rb 配置文件中设置,agent_admin则会生成登录路径,但不会admin_users.

所有其他 ActiveAdmin 路径通常为这两个名称空间生成。

我该如何解决,生成login由 处理的两个路径activedmin

4

1 回答 1

15
devise_for :agent_admins, ActiveAdmin::Devise.config.merge({path: '/agent'})
devise_for :admin_users, ActiveAdmin::Devise.config
ActiveAdmin.routes(self)

这解决了这个问题。

于 2013-10-18T13:58:59.893 回答