【Rails】editアクションでのエラー解決


本記事を書いた理由

  • 今回引っかかったエラーに対してどのように解決をしたのかを記録として残すことで同じミスをしないようにするため

目次

  • どんなエラーが出たのか
  • 考え方の道筋(実際にやってみたこと)
  • 反省点

参考記事

どんなエラーが出たのか

todoアプリで編集機能をつけようとしたがうまく動かない。
具体的にはeditボタンという編集ページに飛ぶボタンを押すとエラー画面が出てくる状態。

エラー画面

考え方の道筋(実際にやってみたこと)

結論
edit.html.erbのform_forの記述にパスを指定してあげる必要があった

実際にやってみたこと

  • エラー画面をみてeidt.html.erbに問題があると考える

  • コントローラの記述に誤りはないのか(編集したい情報をきちんと持ってきてこれているのか)

  • 改めてedit.html.erbを見てみる(記述に変更を加えてみた)

エラー画面をみてeidt.html.erbに問題があると考える

  • エラー画面からパスに問題があると推定した
  • しかしこの時点でパスの何を直せばいいのかよくわからないので他のサイトからform_forの記述方法を調べて誤りがないか調べてみた。結果として特に誤りがないと判断した

コントローラの記述に誤りはないのか(編集したい情報をきちんと持ってきてこれているのか)

  • コントローラの記述に誤りがないかどうか確認をした(特に問題なし)

  • 確認のためにbinding.pryを使って編集したい情報が持ってこれているか確認をした(特に問題なし)
  • この時点でルーティングに問題がないと判断した(コントローラがしっかりと動いていることが確認できたため)

改めてedit.html.erbを見てみる(記述に変更を加えてみた)

  • ルーティングとコントローラに問題がない時点でビュー(edit.html.erb)に問題があることを再確認した
  • そうなるとエラー画面の通りform_forの記述方法に問題がある可能性が高いので改めて確認をした
  • 結果としてform_forは自動的にcreateアクションやeditアクションを分けてくれる。しかしうまくいかない時もあるのでその時は直接アクション名(パス)を書いてあげることで解決できるらしい。(以下のように編集)

  • 上記のようにパスを新しく指定することでエラーが解決できました。 *action="index"になっていますが実際はpatchを入れて編集内容を保存します。

エラー解決後の画面

反省点

  • エラー画面の詳細をもう少しみてそこから解決できる方法を考えるべきだった(最初のエラー画面の時点で意味がよくわからないのでコントローラの方などに原因があると考えてしまった)
  • 上記のようなことをしなかったので解決までに時間がかかってしまった