deviseでcontrollerをカスタマイズしていくときにルーティングもカスタマイズしていく事が多いと思います。
個人的に管理画面を作成していてルーティングを変更する事が多かったので備忘録として残していきます。
##sign_inとsign_outのルーティングを変更する
###変更前
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
###変更後
routes.rb
devise_scope :user do
get 'login', to: 'devise/sessions#new'
post 'login', to: 'devise/sessions#create'
delete 'signout', to: 'devise/sessions#destroy'
end
こうすることで下記のルーティングになります。
login GET /login(.:format) devise/sessions#new
POST /login(.:format) devise/sessions#create
signout DELETE /signout(.:format) devise/sessions#destroy
###prefixを変更前の様にnew_user_sessionの様にしたい場合はasを使い指定する必要があります。
devise_scope :user do
get 'login', to: 'devise/sessions#new', as: :new_user_session
post 'login', to: 'devise/sessions#create', as: :user_session
delete 'signout', to: 'devise/sessions#destroy', as: :destroy_user_session
end
##Controllerをカスタマイズしている場合
routes.rb
devise_for :users,
path: '',
path_names: {
sign_up: '',
sign_in: 'login',
sign_out: 'logout',
registration: "signup",
},
controllers: {
registrations: "users/registrations",
sessions: "users/sessions"
}
##admin画面などでのルーティングを組みたい場合
routes.rb
devise_for :users,
path: :admin,
:controllers => {
:registrations => 'organizers/registrations',
:sessions => 'organizers/sessions',
:passwords => 'organizers/passwords'
}
pathを指定してあげるとusersを'admin'に置き換える事が出来ます。
参考になった記事
ご覧いただきありがとうございました。