7
6

More than 3 years have passed since last update.

[Rails] Deviseでredirect先を変更する方法

Last updated at Posted at 2021-02-11

デフォルトでは root_url に飛ばされます。
これを変更していきましょう。

コントローラを作成する

$ rails g devise:controllers users

実行すると、 app/controllers/users の下に registration_controller, sessions_controllerなど必要なコントローラが作成されます。

ルーティングを設定する

これから定義するメソッドを反映させるために devise_for :users の後に以下を追記します。

config/routes.rb
devise_for :users, controllers: {
    registrations: 'users/registrations',
    sessions: 'users/sessions'
  }

メソッドを定義する

registrations_controller.rb に追記する

アカウント登録後のリダイレクト先と、アカウント編集後のリダイレクト先を設定します。

app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
(省略)...

#アカウント登録後のリダイレクト先
 def after_sign_up_path_for(resource)
   リダイレクト先のパス
 end

#アカウント編集後のリダイレクト先
 def after_update_path_for(resource)
   リダイレクト先のパス
 end

例えば、リダイレクト先のパスに user_path(resource) を設定するとユーザーの個人ページにリダイレクトされます。

sessions_controller.rb に追記する

ログイン後のリダイレクト先とログアウト後のリダイレクト先を設定します。

app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
(省略)...

#ログイン後のリダイレクト先
 def after_sign_in_path_for(resource)
   リダイレクト先のパス
 end 
#ログアウト後のリダイレクト先
 def after_sign_out_path_for(resource)
   リダイレクト先のパス
 end 

redirect先をroutesで確認する

$ rails routes を実行すると詳細が出てきます。

get行 のみログイン後に遷移したいページを指定できます。

new_user_session GET    /users/sign_in(.:format) 

例えば上記の場合 new_user_session_path をリダイレクト先のパスを指定するところに追記します。

 posts_index GET    /posts/index(.:format)   

例えば上記の場合 posts_index_path をリダイレクト先のパスを指定するところに追記します。

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6