本日やったこと
ログイン機能の作成
問題
ブラウザからログアウトのリクエストを送付するとエラーが出てしまう。
http://localhost:3000/logout
Routing Error
No route matches [GET] "/logout"
Rails.root: /Users/bupolang/projects/cocologue
環境
各種ファイル
config/routes.rb
はこのように書いています。
Rails.application.routes.draw do
root to: 'toppages#index'
get 'login', to: 'sessions#new'
post 'login', to: 'sessions#create'
delete 'logout', to: 'sessions#destroy'
get 'signup', to: 'users#new'
resources :users, only: [:show, :new, :create]
end
app/views/layouts/application.html.erb
は以下のように書いています。
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Cocologue</title>
<%= csrf_meta_tag %>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
<%= stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' %>
<%= javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
</head>
<body>
<%= render 'layouts/navbar' %>
<div class="container">
<%= render 'layouts/flash_messages' %>
<%= yield %>
</div>
</body>
</html>
試したこと・考えたこと
ルーティングでdelete 'logout', to: 'sessions#destroy'
としているにもかかわらず、送られているリクエストのVerbがGETなのがおかしい。DELETEになるはず。
RailsのAPIドキュメントの link_to
の欄を参照すると、
「Note that if the user has JavaScript disabled, the request will fall back to using GET.」
とある。DELETEリクエストがGETに変わってしまっているのは、Javascriptが関係しているのかも?
下の記事を参照すると、
同じ問題が起きているユーザに対して「jquery/jquery_ujsなどのライブラリを必要とするビルトインのJavascriptライブラリを有効にしたか?」と聞いている回答者がいた。
No route matches [GET] "/logout" [rails] - Stack Overflow
そこで、Gemfileにgem 'jquery-rails'
を追記し、 bundle update
したけれど、やはり同じエラー。
今日はここまで。