概要
Rails5にてdeviseを導入した際、deviseによって生成されるパスワード変更画面をうまく表示させることができないというトラブルに見舞われたため、備忘録として残しておきます。
※初投稿の記事になりますので、分かりにくかったらすみません、、、
この記事でわかること
- deviseのログイン前後におけるパスワード変更画面の表示方法
前提
<使用環境>
ruby 2.5.7
rails 5.2.4
※deviseは導入済みとして進めますので、導入方法については以下の記事等を参考にしてください。
参考ページ:Deviseの設定手順をまとめてみた。 その1 導入編
表示方法
deviseのルーティングを確認
devise導入後、コンソール上で「rails routes」コマンドを使ってルーティングを確認すると以下のような形で表示されるかと思います。
$ rails routes
Prefix Verb URI Pattern Controller#Action
new_user_session GET /users/sign_in(.:format) devise/sessions#new
user_session POST /users/sign_in(.:format) devise/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) devise/sessions#destroy
new_user_password GET /users/password/new(.:format) devise/passwords#new
edit_user_password GET /users/password/edit(.:format) devise/passwords#edit
user_password PATCH /users/password(.:format) devise/passwords#update
PUT /users/password(.:format) devise/passwords#update
POST /users/password(.:format) devise/passwords#create
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
user_registration PATCH /users(.:format) devise/registrations#update
PUT /users(.:format) devise/registrations#update
DELETE /users(.:format) devise/registrations#destroy
POST /users(.:format) devise/registrations#create
このときパスワード変更画面を表示させるためのルーティングは
edit_user_password GET /users/password/edit(.:format)
のように思われるかもしれませんが(自分がそうでした)、実はこれとは別にもう1つ変更画面用のルーティングが存在しています。
それが
edit_user_registration GET /users/edit(.:format)
です。両者の違いは、
edit_user_password GET /users/password/edit(.:format) #ログイン前のパスワード変更画面
edit_user_registration GET /users/edit(.:format) #ログイン後のパスワード変更画面
とのことです。
「link_to」におけるpath指定など、それぞれ正しく使い分けていきましょう(とは言ってもログイン後のものしか基本使わない気もする)。