前提・実現したいこと
railsチュートリアル9章に取り組んでいるのですが、logoutボタンからログアウトを行うとルーティングエラーが発生します。
ルーティングやlink_toの書き方も確認したのですが、問題はなさそうです(検証ツールを使うと、htmlではmethodは正しくdeleteになっていました)。
いろいろと試行錯誤はしたのですが(「試したこと」に下述します)うまくいかず、もはや万策尽きてしまったので質問させていただきました。
程度の低い質問であったら大変申し訳ありません。
また、回答に必要な情報が不足している場合、恐縮ですがご指摘ください。随時追記いたします。
よろしくお願いいたします。
発生している問題・エラーメッセージ
logoutボタンからログアウトを行うと
No route matches [GET] "/logout"
このエラーが発生する。
該当のソースコード
ruby
1[routes.rb] 2Rails.application.routes.draw do 3 4 get 'users/new' 5 root 'static_pages#home' 6 get '/help', to: 'static_pages#help' 7 get '/about', to: 'static_pages#about' 8 get '/contact', to: 'static_pages#contact' 9 get '/signup', to: 'users#new' 10 get '/login', to: 'sessions#new' 11 post '/login', to: 'sessions#create' 12 delete '/logout', to: 'sessions#destroy' 13 resources :users 14 15end
HTMLerb
1[_header.html.erb(パーシャルです)] 2<header class="navbar navbar-fixed-top navbar-inverse"> 3 <div class="container"> 4 <%= link_to "sample app", root_path , id: "logo" %> 5 <nav> 6 <ul class="nav navbar-nav navbar-right"> 7 <li><%= link_to "Home", root_path %></li> 8 <li><%= link_to "Help", help_path %></li> 9 <% if logged_in? %> 10 <li><%= link_to "Users", '#' %></li> 11 <li class="dropdown"> 12 <a href="#" class="dropdown-toggle" data-toggle="dropdown"> 13 Account <b class="caret"></b> 14 </a> 15 <ul class="dropdown-menu"> 16 <li><%= link_to "Profile", current_user %></li> 17 <li><%= link_to "Settings", '#' %></li> 18 <li class="divider"></li> 19 <li> 20 <%= link_to "Log out", logout_path, method: :delete %> 21 </li> 22 </ul> 23 </li> 24 <% else %> 25 <li><%= link_to "Log in", login_path %></li> 26 <% end %> 27 </ul> 28 </nav> 29 </div> 30</header>
ソースコード
試したこと
[1]
https://teratail.com/questions/164311
こちらの質問を参考にしてjQueryを導入しました。
=>失敗(jQueryが正常に動いていることは確認済みです。)
[2]
https://teratail.com/questions/336403
この質問をした際に頂いた回答の通り、rails-ujs
を導入しました。
=>失敗
[3]
html.erbのlink_to
をbutton_to
に変更しました
=>失敗
[4]
{method: :delete}
のように{}をつけろという旨の記事を見つけたため、実践しました。
=>失敗
[5]
rails server
の再起動を行いました。
=>失敗
[6]
delete
メソッドをget
メソッドに変更しました。
=>ログアウト自体は成功したのですが、その後発生した別のエラーの原因であると推察したため、やはりdeleteメソッドのままログアウトを成功させることが必須であると判断しました。
補足情報(FW/ツールのバージョンなど)
ruby 2.6.3
rails 6.0.3
aws cloud9を使用