[Devise]Deviseのroutingカスタマイズ方法ざっくりまとめた


開発案件でdeviseのルーティングをカスタマイズをする機会が多かったのでざっくりまとめてみました。

まずdevise導入時に以下コマンド入力してルーティング設定しますよね。

ターミナル
rails g devise user

すると、以下のように自動でルーティングが設定されます。
これだけでdeviseルーティングが賄えるわけですが、カスタマイズしたい場合それの記述方法があります。

Rails.application.routes.draw do
devise_for :users
         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

Routingカスタマイズ方法

usersコントローラーを使いルーティングをuserに変更したい場合

  devise_for :users, controllers: {
    registrations: 'users/registrations',
    sessions: "users/sessions",
    passwords: "users/passwords"
  }
          new_user_session GET      /users/sign_in(.:format)        users/sessions#new
                                    ...(略)
         new_user_password GET      /users/password/new(.:format)   users/passwords#new
                                    ...(略)
  cancel_user_registration GET      /users/cancel(.:format)         users/registrations#cancel
                                    ...(略)

devise_forに加えて、devise_scope で自由にカスタマイズする

registrationsだけカスタマイズしたい場合、devise_forでskipを使う。
※skipすると、7つのルーティングは自分で生成する必要があるので、
 お好みで設定する == パスやアクションを自由に変更できる。

  devise_for :users, skip: :registrations, controllers: {
    sessions: 'users/sessions'
    passwords: 'users/passwords'
  }
  devise_scope :user do
  # registrationsのカスタマイズしたいルーティングを記述
  end

基本カスタム例

/users/sign_up→/signup

  devise_scope :user do
    get '/signup', to: 'users/registrations#new'
    post '/signup', to: 'users/registrations#create'
  end
  signup GET    /signup(.:format)   users/registrations#new
         POST   /signup(.:format)   users/registrations#create

prefixを変更したくない場合as:を使い、元々のprefixを記載。

  devise_scope :user do
    get '/signup', to: 'users/registrations#new', as: :new_user_registration
    post '/signup', to: 'users/registrations#create', as: :user_registration
  end
  new_user_registration GET    /signup(.:format)    users/registrations#new
      user_registration POST   /signup(.:format)    users/registrations#create

passwordは元のまま、追加で他もカスタマイズしたいような場合

skip: [ ]括弧で括り追加します。

  devise_for :users, skip: [:registrations, :sessions], controllers: {
    passwords: 'users/passwords'
  }
  devise_scope :user do
  # sessionsのカスタマイズしたいルーティングを記述
  # registrationsのカスタマイズしたいルーティングを記述
  end

以上です。

参考にした記事
https://qiita.com/mmmasuke/items/240c1cc14543d1e1c33e

どなたかのお役に立てれば幸いです。