Deviseをカスタマイズして、アカウントを編集した後のリダイレクト先を変更する@TECH CAMP #24
どうも、とだです。プログラミングスクールでの最終課題も大詰めで、そして転職活動準備もあり、今の仕事も忙しいし、TOEICの勉強もあり、なかなかnote投稿まで時間を割けないのが悔しいです。遊びたい。
とりあえず小ネタを少しずつ披露します。以前から言っている「gem 'ancestry'による多階層データを用いて、選択肢を動的に変化させる機能について」は、もう少し時間を頂こうと思います。今回はタイトルにもあるように「Deviseをカスタマイズして、アカウントを編集した後のリダイレクト先を変更する」です。
導入する背景・目的
Webアプリケーションにおいて、アカウントに登録されている情報の編集、例えばメールアドレスや住所ですが、登録されている情報を変更したいので、これを編集してアップデートさせることがあることが想定されます。
だいたいマイページのようなユーザー情報が載っているページに、その情報を変更するためのリンクがあって、そのリンク先に変更するためのフォームがあって、「更新する」みたいなボタンがあって、押すと更新してくれると言ったような具合です。このボタンを押した後に「どのページに遷移されるか」というのをカスタマイズしようというのが今回の目的です。
そもそもDeviseのデフォルトの挙動はどうなってるの?
ズバリ、トップページにリダイレクトされます。(厳密にはrootパスにリダイレクトされます。)
さっきまでマイページにいたのに、いちいちトップページに戻されてはユーザーにとっては不親切です。
念の為、前提を確認しよう
ユーザー管理に便利なgem 'devise'が導入されていて、Userモデルが存在し、devise管理下のusersコントローラーが存在する前提です。
事前準備として、config/routes.rbで
devise_for :users, controllers: { registrations: 'users/registrations',
sessions: 'users/sessions' }
と記述して、ルーティングでどのコントローラを参照するのか明示してあげます。イメージとして、Devise::RegistrationsControllerを継承した、Users::RegistrationsControllerを作成したイメージです。これでapp/controllers/users/registrations_controller.rbを編集すれば、カスタマイズが反映されるようになります。
Deviseをカスタマイズして、アカウントを編集した後のリダイレクト先を変更する
いよいよです。アカウントを登録したり、編集した後のリダイレクト先を編集したい場合は
app/controllers/users/registrations_controller.rbで
protected
#アカウント登録後のリダイレクト先
def after_sign_up_path_for(resource)
リダイレクト先のパス
end
#アカウント編集後のリダイレクト先
def after_update_path_for(resource)
リダイレクト先のパス
end
とカスタマイズすればリダイレクト先を指定できます。
※リダイレクト先のパスを user_path(resource) とすると、登録後にユーザーの個人ページ、つまり「マイページ」のようなページにリダイレクトされるようになります。
今回参考にさせていただいた記事は以下の記事です。
おしまい
簡単ではありますが、いい記事があったおかげでユーザーにとって少しでもストレスレスなWebアプリケーションに仕上げられているんじゃないかなと思います。今回も読んでいただきありがとうございました!