Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 使用Desive,如何拥有两个经过身份验证的_根(用于两个不同的用户模型)_Ruby On Rails_Devise - Fatal编程技术网

Ruby on rails 使用Desive,如何拥有两个经过身份验证的_根(用于两个不同的用户模型)

Ruby on rails 使用Desive,如何拥有两个经过身份验证的_根(用于两个不同的用户模型),ruby-on-rails,devise,Ruby On Rails,Devise,我的Rails 5应用程序使用Desive 4.2处理管理员和代理用户类型的身份验证(单独的表)。这一切都在工作,除了让根目录对于登录的管理员和代理不同 在routes.rb中,我可以为:admin或:user设置authenticated_root,但在应用程序启动时同时执行这两项操作(如下所示)会导致错误:ArgumentError:Invalid route name,已在使用:'authenticated_root' Rails似乎忽略了在两种不同的场景中对authenticated_r

我的Rails 5应用程序使用Desive 4.2处理管理员和代理用户类型的身份验证(单独的表)。这一切都在工作,除了让根目录对于登录的管理员和代理不同

在routes.rb中,我可以为:admin或:user设置authenticated_root,但在应用程序启动时同时执行这两项操作(如下所示)会导致错误:
ArgumentError:Invalid route name,已在使用:'authenticated_root'

Rails似乎忽略了在两种不同的场景中对authenticated_root的两种使用

# routes.rb
devise_for :agents, :skip => [:registrations]
as :agent do
  get 'agents/edit' => 'devise/registrations#edit', :as => 'edit_agent_registration'    
  put 'agents' => 'devise/registrations#update', :as => 'agent_registration'            
end  

devise_for :admins, :skip => [:registrations]  
as :admin do
  get 'admins/edit' => 'devise/registrations#edit', :as => 'edit_admin_registration'    
  put 'admins' => 'devise/registrations#update', :as => 'admin_registration'            
end  

authenticated :admin do
  root 'pages#adminhome', as: :authenticated_root
end
authenticated :agent do
  root 'pages#agenthome', as: :authenticated_root
end
我是否应该使用某种lambda来设置authenticated_root,而不是上面记录和使用的常规方法

我尝试了这种方法,但得到了相同的错误:

root :to => 'pages#adminhome', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Admin' }, as: :authenticated_root
root :to => 'pages#agenthome', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Agent' }, as: :authenticated_root
我删除了“as::authenticated_root”部分,它工作正常。我在rails 5.0.2上

下面的链接说“as::authenticated_root”部分是必要的,因为rails 4不允许使用相同名称的路由,假设您已经定义了根路由