LoginSignup
49
58

More than 5 years have passed since last update.

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

Posted at

目標

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をカスタムしたい

49
58
0

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
49
58