Posted at

[Rails]Deviseで任意のルーティングだけを行う

More than 1 year has passed since last update.


目標


terminal

$ rails routes


下のように一部のルーティングだけを行いたい。

new_user_session GET    /login(.:format)               

devise/sessions#new

user_session POST /login(.:format)
devise/sessions#create

destroy_user_session DELETE /logout(.:format)
devise/sessions#destroy


結論


route.rb

devise_for :users, skip: :all

devise_scope :user do
get 'login' => 'devise/sessions#new', as: :new_user_session
post 'login' => 'devise/sessions#create', as: :user_session
delete 'logout' => 'devise/sessions#destroy', as: :destroy_user_session
end

devise_for :users, skip: :all

ここの部分で、Deviseのマッピングはするけど、skipして何も設定しないみたいことを行います。

その上で、devise_scope以下に自分の好きなようにルーティングしてあげればOKです。

devise_for vs devise_scope routes #2840


注意: destroy_user_session

link_toとかで、destroy_user_session_pathを指定すると、DELETEではなく、GETしてしまい、ルーティングエラーがでるかもしれません。

一番簡単な方法としては、button_toとすることで、この問題を回避できます。

RailsでjQueryを読み込まずにmethod: :deleteのリンクを実現する(Routing Error No route matches [GET] ... の対処法)


参照

Rails: deviseのURLをカスタムしたい