2017-02-01 3 views
1

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 

Antwort

Verwandte Themen