
RoutingError No route matches [HTTPメソッド] “パス” というエラーがでて修正できません。
どんなふうに解決していけばいいでしょうか・・・
そんな疑問にお答えします。
このエラーは Ruby on Rails のルーターに起因するエラーです。
エラーメッセージを見て解決できていない場合、ルーターの使い方に不明点があるのではないでしょうか。
この記事を読んで実際のエラーに対処できるようになればRailsのコーディング力が一段と向上しますよ!
原因: リクエストに対するルーティングが定義されてない
リクエスト(HTTPメソッド+パス)がルーティングに定義されていないのが原因です。
リクエスト(HTTPメソッド+パス)はエラー画面では以下の場所に書かれています。

上記の例では
- HTTPメソッド: POST
- パス: /books/new
となっています。
ルーティングに定義されているかどうかは rails routes コマンドで確認できます。

Verbの列がHTTPメソッド、URI Pattern の列がパスです。
rails routes については以下の記事も参考にしてください。
発行されたリクエスト(HTTPメソッド+パス)が rails routes の表になければ RoutingError: No route matches のエラーが発生します。
対処法
発行されたリクエスト(HTTPメソッド+パス)が rails routes の表になければ発生するエラーなので
考えられる対処法は
- エラーとなったリクエスト(HTTPメソッド+パス)を受け入れるルーティングを足す
- 存在するルーティングとなるようにリクエストの発行元(リンク、フォーム、リダイレクト)を修正する
どちらかとなります。
どちらなのかは実現したい仕様によるので、やりたいことを確認しましょう。
よくある間違いと対処法
よくある間違いと対処法を解説します。
リクエスト(HTTPメソッド+パス)が正しいのか、ルーティングが正しいのかによって対処法は異なります。
リクエスト(HTTPメソッド+パス)が正しいと考えられる場合
リクエスト(HTTPメソッド+パス)が正しいのであれば修正するのはルーティングです。
修正対象は config/routes.rb です。
rails routes コマンドの結果で Verb + URI Pattern がリクエスト(HTTPメソッド+パス)になるような行が追加されるように config/routes.rb を修正しましょう。
ルーティングについては以下を参考にしてください。
リクエスト(HTTPメソッド+パス)が間違っている場合
リクエスト(HTTPメソッド+パス)が間違っている場合は、そのリクエストを発行するための
- リンク
- フォーム
- リダイレクト
が間違っています。
- リンクであれば link_to などの a タグを生成するヘルパーメソッドの呼び出し
- フォームであれば form_with や form_tag などの form タグを生成するヘルパーメソッドの呼び出し
- リダイレクトであれば redirect_to などのリダイレクトを発生させるヘルパーメソッドの呼び出し
を確認しましょう。
参考: link_to によるリンクの作り方を徹底解説【Ruby on Rails】
まとめ
RoutingError: No route matches [HTTPメソッド] “パス” の原因と対処法を解説しました。
このエラーは開発中にはよく発生するのでササッと解決できるようになると Rails 力が向上します。
コツはリクエストとルーティングの関係という Rails の基礎的な部分をしっかりと理解することです。
その他の Rails エラー関連記事はこちら