Приложение My Rails 5 использует Devise 4.2 для обработки аутентификации для типов пользователей Admin и Agent (отдельные таблицы). Это все работает, за исключением того, что корень отличается от зарегистрированного в Admin vs AgentС Devise, как два аутентифицированных_root (для двух разных моделей пользователей)
В routes.rb Я могу установить authenticated_root для: admin ИЛИ: пользователя, но выполнение обоих (как показано ниже) вызывает ошибку, когда приложение запущено: ArgumentError: Invalid route name, already in use: '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
Должен ли я, возможно, использовать какой-то лямбда установить 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