Meine Rails 5 App verwendet Devise 4.2, um Authentifizierung für Admin und Agent-Benutzertypen (separate Tabellen) zu behandeln. Es funktioniert alles, abgesehen davon, dass der root für einen eingeloggten Admin gegen AgentMit Devise, wie haben zwei authenticated_root (für zwei verschiedene Benutzermodelle)
In routes.rb ich kann authenticated_root für entweder festgelegt: Admin OR: Benutzer, aber beide (wie unten gezeigt) verursacht den Fehler wann Die App wird gestartet: ArgumentError: Invalid route name, already in use: 'authenticated_root'
Es scheint, dass Rails ignoriert, dass die beiden Verwendungen von authenticated_root in zwei verschiedenen Szenarien auftreten.
# 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
Sollte ich vielleicht irgendeine Art von Lambda anstelle der normalen Methode dokumentiert einzustellen authenticated_root und oben verwendet?
habe ich versucht, diesen Ansatz stattdessen aber den gleichen Fehler hätte:
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