railsでlink_toメソッドが効かない

ここ二日間このエラーに費やして改めて自分の問題解決力のなさにあきれたが、色々と分かったこともあるので、記述します。

 

問題:Rails5系のアプリでlink_toメソッドを使ってユーザーの削除機能を実装しようとしたところ、deleteではなく、getでアクセスしてしまう。。

 

解決方法:

①Turbolinksのバージョンを下げる

Turbolinksがうまく動かない理由(推測)とその解決策 · GitHub

②application.jsのAssetの依存関係を整理(jquery-ujs)を追加

link_toで突然methodが効かなくなって困ってるあなたへ - Qiita

③ごじゃごじゃやった末に訳も分からなく追加した部分を削除(これに気づくの時間がかかる、、)

 

学んだこと:

・Asset Pipeline とは、rails app内にあるhtml、cssjavascriptファイルをコンパイルしてウェブページに表示する際に適応するルールをまとめる役割をする。例えば、scssやcoffeeファイルをそれぞれcssjavascriptに変換してくれる。

・Delete methodは、htmlではサポートされていないため、javascriptを使用して実装するか、フォームとPOSTリクエストを使用してDELETEリクエストを偽造するらしい。

・Application.jsの最後の部分にjavascriptファイルをコンパイルする際のルール(ディレクティブ)を決めている。今回はjquery-ujs(GET以外のハイパーリンクを組んでくれる)を記述していなかった。

・ディレクティブは上から順に読み込まれるらしいため、順番が重要になる。

//= require rails-ujs
//= require jquery
//= require jquery_ujs
//= require turbolinks
//= require bootstrap.min
//= require_tree .

これで成功した

rails 5系からrails-ujsが加わり、これがjqueryの代わりを果たしてくれるらしいが、これから使っていきたい。