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