在sign_up / sign_in之后,按用户类型重定向

时间:2013-01-03 04:46:18

标签: ruby-on-rails redirect

我有两种用户:管理员和工作人员。

每个用户都有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。

任何帮助表示赞赏!

2 个答案:

答案 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