本日やったこと
ログイン機能の作成
問題
ブラウザからログアウトのリクエストを送付するとエラーが出てしまう。
http://localhost:3000/logout
Routing Error No route matches [GET] "/logout" Rails.root: /Users/bupolang/projects/cocologue
環境
- Rails 5.2.3
各種ファイル
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
は以下のように書いています。
<!DOCTYPE html> <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
したけれど、やはり同じエラー。
今日はここまで。