LoginSignup
1
1

More than 3 years have passed since last update.

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

Last updated at Posted at 2020-12-22

開発案件で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

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

1
1
1

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