目標
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] ... の対処法)