1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【Rails】No route matchesの解決方法

Last updated at Posted at 2021-07-06

はじめに

この記事では、Routing Error No route matchesの解決方法を説明します。

環境

macOS Catalina 10.15.7にRails 6.0.4をインストールして使っています。
また、この記事はTwitterのようなアプリケーションを作成した際に発生した事象をもとに書かれています。

解決方法

  1. メッセージに従い、ルーティングの設定に間違いないか調べます。
  2. エラーが出たページの処理まわりで怪しいところがないか調べます。

1. ルーティングの確認

1.1 ターミナルでrails routesコマンドを入力し、ルーティングを確認します。
1.2 hoge/config/routes.rbを参照し、エラーが出たURLで正しくルーティングが設定されているか確認します。

今回の場合

エラーメッセージで「newアクションにこのPOSTが設定されていないよ」と言われていました。
スクリーンショット 2021-07-07 0.31.23.png

rails routesでルーティングを確認し、routes.rbと照らしあわせます。

スクリーンショット 2021-07-07 0.35.35.png
スクリーンショット 2021-07-07 0.35.01.png

たしかにnewにはGETが設定されています。エラーメッセージに従うとここでルーティングの設定を直せばOKなのですが、今回この設定で問題ないはずなので別部分のミスを疑いました。

2. エラーが出たページの処理で誤りがないか確認

MVCをそれぞれ確認します。

今回の場合

newアクション、特にformのsubmitボタンを押した際にエラーが発生したため、その周辺を重点的に見ました。
スクリーンショット 2021-07-07 0.50.02.png
スクリーンショット 2021-07-07 0.50.24.png
スクリーンショット 2021-07-07 0.48.43.png

コントローラーとnewアクションで同じにすべきインスタンス変数が違いました(単数形にすべきところを複数形にしていた)。
submitボタンを押した際にテーブルに投稿を登録する処理が始まるため、インスタンス変数の違いがこのタイミングで悪さをしていました。

おわりに

非常につまらないミスではありましたが、ルーティングの設定は正しいはずなのにどうしてエラーが吐かれているんだろう…と困った方の役に立てば幸いです。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?