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に対応していないとか。。。
参考