0

我有两种用户:Admin 和 Worker。

每个用户都有 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 未在路线中定义。

任何帮助表示赞赏!

4

2 回答 2

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

希望这可以帮助!

于 2013-01-03T05:08:57.033 回答
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
于 2013-01-03T05:10:59.067 回答