【Rails】 deviseで新規登録後またはログイン後にroot_path以外のページに飛ばす


deviseで新規登録したけどroot_path以外のページに飛ばしたい...

今までdevise使ってきたけど新規登録やログインをするとroot_pathのページに勝手に戻ってログインしている状態になってたんですが(いやー便利)、サイト作っている途中にroot_path以外のページに飛ばしたことになりまして調べてみました。

コントローラーに記述して飛ばす

root_path以外のページ遷移は多分コントローラに書かないと出来ないかも
調べてたらapplication_controller.rbにまとめて書く方やそれぞれの動作に合わせてregistrations_controller.rbやsessions_controller.rbに書く方がいましたが今回はapplication_controller.rbにまとめて書きました。

その前にrails routesで飛ばしたいpathを確認


今回は下から2番目のuser_pathに飛ばします。

application_controller.rbへ記述

application_controller.rb
class ApplicationController < ActionController::Base
  def after_sign_in_path_for(resource)
    user_path(resource)
  end
end

この'after_sign_in_path_for(resource)'でログイン後にどこのページに飛ぶか指定できるんで中にpathを書けばそこに飛んじゃいます。今回はuser_pathですね。

ちなみにpathの横に(resource)と書いているのはURI Patternが/users/:idなのでこの:idを渡すために(resource)が必要になります。これないとエラー出ます。

補足

今回は新規登録後やログイン後に指定したページに飛ばすやり方だけどログアウトした後にも同様のやり方で指定したページに飛ばせるので紹介

application_controller.rb
class ApplicationController < ActionController::Base
  def after_sign_out_path_for(resource)
    index_path #今回は仮にindex_pathを置いていますがここにログアウト後のpathを書く
  end
end

まあ何もしなければroot_pathに飛ぶのであんま使うことなさそう

ではでは