我有两种用户:管理员和工作人员。
每个用户都有role_ids:如果user.role_ids = [1],则该用户为Admin。如果user.role_ids = [2],则该用户为Worker。
在sign_up / sign_in之后,我想通过他的role_ids重定向他:
如果他的类型是管理员,则将其重定向到:localhost:3000/tasksadmins
。
如果他的那种是工人,则将他重定向到:localhost:3000/workers
。
这是我的routes.rb
:
devise_for :users do get '/users/sign_out' => 'devise/sessions#destroy' end
resources :tasksadmins
resources :workers
root to: "workers#index"
我想我必须做点什么:
if current_user.role_ids == [2]
root to: "workers#index"
else
root to: "tasksadmins#index"
end
但是路线中没有定义current_user。
任何帮助表示赞赏!
答案 0 :(得分:1)
您可以覆盖Devise的RegistrationsController并根据您的需要修改方法after_sign_in_path_for
:
def after_sign_in_path_for(resource_or_scope)
if resource_or_scope.is_a?(User)
return admins_path if resource_or_scope.admin?
workers_path
else
super
end
end
希望这有帮助!
答案 1 :(得分:1)
试试这个:
在routes.rb中添加一个根,在控制器中我们必须提到我们去哪里..!
在 routes.rb :
中root to: "taskadmins#index"
在taskadmins控制器中,您可以使用current_user
进行检查在 taskadmins Controller.rb :
中def index
if current_user.role_ids == [2]
redirect_to "/workers/index"
else
redirect_to "tasksadmins#index"
end
end