問題
rails tutorial 8章を学習中。
アプリにログインして、[logout]ボタンでログアウトしようとすると
Routing Error[No route matches [GET] “/logout”]
が発生。
routes.rbに記載したログアウトについての記載は以下
delete '/logout', to: 'sessions#destroy'
本当はdeleteメソッドを送りたいのに、なぜgetメソッドになるのか。
解決策
調べてみると、JQueryがないとdeleteメソッドを送れないそう。
①apprication.jsから「jquery_ujs」を呼び出す。
app/assets/javascripts/apprication.js
//= require rails-ujs
//= require jquery
#追記
//= require jquery_ujs
#ここまで
//= require bootstrap
//= require turbolinks
//= require_tree .
まだerrorが続く。
②apprication.html.erbの<head></head>
部分に
<%= javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' %>
を追加。
まだerror
③こちら「Rails6でjQueryの導入方法」の記事を参考に、
$ yarn add jqueryを実行後、environment.jsを追記。
config/webpack/environment.js
const { environment } = require('@rails/webpacker')
#ここから
const webpack = require('webpack')
environment.plugins.prepend('Provide',
new webpack.ProvidePlugin({
$: 'jquery/src/jquery',
jQuery: 'jquery/src/jquery'
})
)
#ここまで
module.exports = environment
解決。
原因
jQueryが動いていないためにdeleteメソッドが呼ばれていなかった。
環境
cloud 9
rails -v 6.0.3