Rails 4 - Devise_scope,root不适用于多种类型的用户(STI)

时间:2015-11-13 22:51:33

标签: ruby-on-rails ruby-on-rails-4 devise sti

我正在尝试弄清楚如何为不同的devise_scope用户模型重定向到root。能够在每个范围内无问题登录/退出,但root只能作为第一个(公司)工作。 我尝试将 device_scope 更改为 范围仍然没有运气

/routes.rb

authenticated :user do

devise_scope :company do
 root :to => 'company/main#account', :as => :company_root
get 'main/account', :to => 'company/main#account', :as => :company_main_account
end

devise_scope :employee do
 root :to => 'employee/main#account', :as => :employee_root
 get 'employee/main/account', :to => 'employee/main#account', :as => :employee_main_account
end

devise_scope :professional do
 root :to => 'professional/main#account', :as => :professional_root
 get 'professional/main/account', :to => 'professional/main#account', :as => :professional_main_account
end
end

unauthenticated do
root :to => 'welcome#index'
end

尝试这种方法也没有运气,root不适用于所有范围

root :to => 'company/main#account', :constraints => lambda { |request|request.env['warden'].user.class.name == 'Company' }, :as => "company_root"
root :to => 'employee/main#account', :constraints => lambda { |request| request.env['warden'].user.class.name == 'Employee' }, :as => "employee_root"

感觉我已经尝试了所有可能的方法,请任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用一个根,root :to => 'welcome#index'

在你的welcome控制器中,处理它

def index
  if user_signed_in?
      if user.class.name == "Company"
        redirect_to company_root_path(current_user)
      elsif user.class.name == "Employee"
        redirect_to employee_root_path(current_user)
      else
        redirect_to professional_root_path(current_user)
      end
  end
end

可能有一些更好的解决方案,但我想你可以从这个开始。