0

管理者とワーカーの 2 種類のユーザーがいます。

各ユーザーには role_id があります。user.role_ids = [1] の場合、ユーザーは管理者です。user.role_ids = [2] の場合、ユーザーはワーカーです。

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 に答える