はじめに
Ruby on railsの学習を始めて、数日たち順調だと思っていた矢先に半日、下記のエラーでハマったため備忘録として残します。
エラー
Unknown action
The action 'show' could not be found for MessagesController
link_toでDELETEメソッドを呼ぼうとしたら発生。
コントローラーにshowアクションが無いと怒られてます。
パス、メソッドもあっているのに上記が発生してるので何かおかしいと思い諸々、調べてみました。
確認したこと
-
開発者モードやコード上に異常がないか
- コード自体の内容や開発者モードで確認しただけなので割愛します。
-
コントローラーのprivate内にアクションを記載していないか
- Rubyではprivateと記述すると以下全文privateになるためdestroyアクションが属してないか。
jquery_ujsが書いてあるか
-
app/assets/javascripts/application.js
//= require jquery //= require jquery_ujs <-この行を足します
- 上記のように追加しないとエラーになる場合があり、またjqueryを先に読み込ませないとエラーになります。
解決
コントローラーのlink_toメソッドをbutton_toメソッドに変更しました。
原因としてはlink_toがRubyのCSRF対策により外部アクセスとみなされアクセスが出来なかったようです。
下記の表に大まかな違いを記載しておきます。
link_to | button_to | |
---|---|---|
HTMLタグ | a | form |
httpリクエスト | get | post |
簡単ですがこれで以上になります。