実行環境
- OS: Windows10
- 一部、WSL2 (Ubuntu)のGUIアプリを利用して、コマンドを実行しています。
- ruby 3.1.4
- Rails 7.0.7.2
発生したエラー
Railsを勉強しながらコードを書いていて、削除リンクを実現して
<%= link_to "削除", "/memo/#{@memo.id}/destroy", {method: "post"} %>
と記述しました。そして、アクセスしてみると
と出て、サーバーを起動しているターミナルには
ActionController::RoutingError (No route matches [GET] "/list/1/destroy"):
と出ました。エラー文を見れば、どうやら{method: "post"}
の部分が機能していないらしい。
解決法
ターミナルで次を実行する(WSL2の方が楽だったのでWSLを起動しています)。
$ ./bin/importmap pin @hotwired/turbo-rails
--出力例--
Pinning "@hotwired/turbo-rails" to https://ga.jspm.io/npm:@hotwired/turbo-rails@7.3.0/app/javascript/turbo/index.js
Pinning "@hotwired/turbo" to https://ga.jspm.io/npm:@hotwired/turbo@7.3.0/dist/turbo.es2017-esm.js
Pinning "@rails/actioncable/src" to https://ga.jspm.io/npm:@rails/actioncable@7.0.7/src/index.js
実行すると、config/importmap.rb
に先ほど出力として出てきた3つのピンが追加されていることが確認できます。
config/importmap.rb
pin "application", preload: true
+ pin "@hotwired/turbo-rails", to: "https://ga.jspm.io/npm:@hotwired/turbo-rails@7.3.0/app/javascript/turbo/index.js"
pin "@hotwired/stimulus", to: "stimulus.min.js", preload: true
pin "@hotwired/stimulus-loading", to: "stimulus-loading.js", preload: true
pin_all_from "app/javascript/controllers", under: "controllers"
+ pin "@hotwired/turbo", to: "https://ga.jspm.io/npm:@hotwired/turbo@7.3.0/dist/turbo.es2017-esm.js"
+ pin "@rails/actioncable/src", to: "https://ga.jspm.io/npm:@rails/actioncable@7.0.7/src/index.js"
最後に、さっきの削除リンクのメソッド指定の部分をdata: {turbo_method: "post"}
とする。
<%= link_to "削除", "/memo/#{@memo.id}/destroy", data: {turbo_method: "post"} %>
こうすることで解決できた。