見出し画像

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アプリケーションに仕上げられているんじゃないかなと思います。今回も読んでいただきありがとうございました!

 

この記事が気に入ったらサポートをしてみませんか?