開発案件で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
どなたかのお役に立てれば幸いです。