1
1

More than 3 years have passed since last update.

今更だけどdeviseのPrefixについて整理してみた

Posted at

はじめに

deviseで自動作成されるルーティングである「sessions」「password」「registrations」に関する備忘録です。
Prefixによる処理の記述はよく行いますが、「Prefixを見ただけでどんな処理が実行されるか?」をパッとイメージできなかったので整理しました。
ミスがあれば、コメントで教えてください。

開発環境

  • Ruby 2.7.2
  • Rails 6.1.3
  • PostgreSQL 13.2

事前準備

まずはログイン機能をもつサンプルアプリを下記コマンドで作成します。
DBはPostgreSQL、テストファイルは不要なので-Tを付けます。

rails new sample -d postgresql -T

gem 'devise'の記述をGemfileに追加し、bundle installをします。

次に、下記コマンドを実行し、ログイン機能に対応したUserモデルを作成します。

rails g devise:install
rails g devise User
rails db:migrate

最後に、下記コマンドでDBの作成とマイグレーションを実行します。

rails db:create
rails db:migrate

http://localhost:3000/users/sign_inにアクセスして、ログイン画面が表示されれば準備OKです。

deviseで作成されたPrefixについて

現段階のuser関連のルーティング

rails routes | grep userを実行し、現段階のuser関連のルーティングを確認します。
コマンドを実行すると、下記が表示されます。
各行の一番最初の文字列がPrefixですね。

        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                                                                           

この結果を見てみると、作成されたPrefixは「user_session」「user_password」「user_registration」に関連していることがわかります。
大雑把ですが、それぞれこんな役割があります。

  • user_session:ログイン・ログアウト関連
  • user_password:パスワードの更新・再発行などパスワード関連
  • user_registration:新規登録やユーザーデータの更新・削除など、登録情報関連

VERBがGETのものに限りますが、「http://localhost:3000/~~~ 」の~~~を上記のURLに変更して、どんな画面にアクセスするか確認してみてください。

user_session

user_sessionに関するルーティングは、以下の通りです。

        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_session:ログインページへのアクセス
  • user_session:ログイン処理
  • destroy_user_session:ログアウト処理

user_password

        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        
  • new_user_password:パスワード再発行画面へのアクセス
  • edit_user_password:パスワード編集画面へのアクセス
  • user_password:パスワードの更新や削除などの処理

user_registration

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 
  • new_user_registration:アカウント登録ページへのアクセス
  • edit_user_registration:アカウント編集ページへのアクセス
  • user_registration:アカウント編集、更新、削除の処理

最後に

今回はdeviseで自動作成されるルーティングのPrefixについてまとめました。
Prefixから処理の内容をイメージするために整理しましたが、もう少し勉強が必要な箇所がある(特に、passwordらへん)ので、引き続き勉強を続けていきます。

参考記事:【Rails】devise関連のルーティングまとめ

1
1
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
1
1