はじめに
この記事では、Routing Error No route matchesの解決方法を説明します。
環境
macOS Catalina 10.15.7にRails 6.0.4をインストールして使っています。
また、この記事はTwitterのようなアプリケーションを作成した際に発生した事象をもとに書かれています。
解決方法
- メッセージに従い、ルーティングの設定に間違いないか調べます。
- エラーが出たページの処理まわりで怪しいところがないか調べます。
1. ルーティングの確認
1.1 ターミナルでrails routesコマンドを入力し、ルーティングを確認します。
1.2 hoge/config/routes.rbを参照し、エラーが出たURLで正しくルーティングが設定されているか確認します。
今回の場合
エラーメッセージで「newアクションにこのPOSTが設定されていないよ」と言われていました。
rails routesでルーティングを確認し、routes.rbと照らしあわせます。
たしかにnewにはGETが設定されています。エラーメッセージに従うとここでルーティングの設定を直せばOKなのですが、今回この設定で問題ないはずなので別部分のミスを疑いました。
2. エラーが出たページの処理で誤りがないか確認
MVCをそれぞれ確認します。
今回の場合
newアクション、特にformのsubmitボタンを押した際にエラーが発生したため、その周辺を重点的に見ました。
コントローラーとnewアクションで同じにすべきインスタンス変数が違いました(単数形にすべきところを複数形にしていた)。
submitボタンを押した際にテーブルに投稿を登録する処理が始まるため、インスタンス変数の違いがこのタイミングで悪さをしていました。
おわりに
非常につまらないミスではありましたが、ルーティングの設定は正しいはずなのにどうしてエラーが吐かれているんだろう…と困った方の役に立てば幸いです。