2017-02-01 16 views
1

My Rails 5アプリケーションはDevise 4.2を使用して、管理者とエージェントのユーザタイプ(個別のテーブル)の認証を処理します。ログインしている管理者とエージェントのルートが異なる場合を除いて、すべて動作していますDevitsでは、2つのauthenticated_root(2つの異なるユーザモデル用)を持つ方法

routes.rbでは、次のいずれかに対してauthenticated_rootを設定できます。admin OR:userですが、両方を実行するとアプリケーションが開始されました:ArgumentError: Invalid route name, already in use: 'authenticated_root'

authenticated_rootの2つの使用が2つの異なるシナリオで発生することをRailsが無視しているようです。

# 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 

私はおそらく代わりに、通常の方法で文書化され、そして上記の使用の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 

答えて

関連する問題