CRUD処理を実装中に発生したエラーについてのアウトプット。
エラー内容
投稿した情報を削除しようとした時に発生したエラー。
削除なのにHTTPメソッドがGET、本来はDELETE.
考えられる原因
1.ルーティングが間違っている。
2.コントローラーアクション間違い
3.ビューファイル記述間違い
エラー解消の流れ
1~3が間違っていないか確認。
ルーティング
delete '/users/:id', to: 'users#destroy'
コントローラー
def destroy
user = User.find(params[:id])
user.destroy
end
削除ボタン追加
<%= link_to '削除', "/users/#{user.id}", method: :delete, data: {confirm: "削除しますか?"} %>
ビュー
<h1>削除完了</h1>
<%= link_to "一覧画面へ", "/users" %>
確認してみたがコードの間違いは見つけられず。
息詰まったのでエラーメッセージでググることに、link_to
ではなくbutton_to
にすれば削除はできるとの記事を発見し、早速実施。
button_to
にコードを書き換えると削除はできるようになったが、スッキリとは解決していないので再度情報収集。
結果
エラーの原因としてはRails7がリリースされたことによるdelete
メソッドの記述の仕方の変更。
エラーが発生した時のRails version
$ rails -v
$ rails 7.0.1
修正
①インストールされているRailsのバージョン確認
$ gem list rails
②使用したいバージョンがないときはインストール実施
$ gem install rails -v 6.0.4.4
③rails6で再度作成
$ rails _6.0.4.4_ new sample_app
確認
削除ができる。
エラーを解決しての感想
エラー文を見て、ルーティングエラーなのはわかると思うので、そこから一つ一つ、間違っている場所を潰していくことでエラーが解決できると思っていたが、
今回のエラーに関しては元の記述も間違っているところがなく手詰まり感がすごかった。
なんとか解決することができたのでまた一つ成長できたと思う。