Posted at

[Rails 4.x] Devise で Sign Out が Routing Error になる際の対応。(method の delete が get になる場合)

More than 3 years have passed since last update.

Rails4でのユーザー認証に、Deviseを使用しています。

Deviseでサインアウトする際に、Routing Errorが発生しました。


問題

routingでは以下の様になっています。

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

viewは以下の感じです。


header.html.erb

<%= link_to "ログアウト", destroy_user_session_path, method: :delete, :class => 'navbar-link'  %> 



対応

delete が動かないので、get

以下を config/routes.rb に追記。


config/routes.rb

  devise_scope :user do

get '/users/sign_out' => 'devise/sessions#destroy'
end

こうすると、routingが新しく足されて、/users/sign_outを上書きする形になります。

users_sign_out GET        /users/sign_out(.:format)                         devise/sessions#destroy

viewは書き換えても変えなくてもいいですが、一応変えます。


header.html.erb

<%= link_to "ログアウト", user_sign_out_path, method: :delete, :class => 'navbar-link'  %> 



原因

はっきりわかっていませんが、Herokuアプリはdeleteに対応していないとか。。。


参考

http://stackoverflow.com/questions/20819230/devise-signout-link-issue-rails4