RoutingError: No route matches [HTTPメソッド] “パス” の原因と対処法【Ruby on Rails 初心者向け】

Ruby on Rails

RoutingError No route matches [HTTPメソッド] “パス” というエラーがでて修正できません。

どんなふうに解決していけばいいでしょうか・・・

そんな疑問にお答えします。

このエラーは Ruby on Rails のルーターに起因するエラーです。

エラーメッセージを見て解決できていない場合、ルーターの使い方に不明点があるのではないでしょうか。

この記事を読んで実際のエラーに対処できるようになればRailsのコーディング力が一段と向上しますよ!

原因: リクエストに対するルーティングが定義されてない

リクエスト(HTTPメソッド+パス)がルーティングに定義されていないのが原因です。

リクエスト(HTTPメソッド+パス)はエラー画面では以下の場所に書かれています。

上記の例では

  • HTTPメソッド: POST
  • パス: /books/new

となっています。

ルーティングに定義されているかどうかは rails routes コマンドで確認できます。

Verbの列がHTTPメソッド、URI Pattern の列がパスです。

rails routes については以下の記事も参考にしてください。

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 を修正しましょう。

ルーティングについては以下を参考にしてください。

rails routes コマンドの読み方を徹底解説

リクエスト(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 エラー関連記事はこちら

タイトルとURLをコピーしました