【Rails】'Routing Error: No route matches とビューファイル

目的

 'Routing Error'と向き合うときにビューファイルを調査し忘れて、結果として調査に長い時間をかけた経験から自分の解釈を仕方を備忘録として残し共有化する。

主な'Routing Error'の原因

  1. ルーティング(routes.rb)の誤記
  2. ルーティングでHTTPメソッド,アクションの設定間違い
  3. ビューファイル(〇〇.html.erb)のリクエスト 設定間違い

Railsのデーター送受信相関図

f:id:yagishi_tan:20200926114538p:plain

ルーティングとビューファイルの関係

 私はこの相関図を見てエラー文を読み解いた時、コントローラーが怪しいと感じてしまいました。

 この時の私は、コントローラーの役割を忘れてしまっていたのです。

  • コントローラーはリクエストに対してレスポンスとしてビューを返す

 視覚的にわかるように先ほどの相関図でイメージを追記します。 f:id:yagishi_tan:20200926120039p:plain

 クライアントの中とサーバーにビューファイルが居ることになります。

 認識としては、クライアントからサーバーにリクエストを送る手段は二つなので

  1. CLI(Command Line Interface)によるコマンド入力
  2. GUI(Graphical User Interface)による入力

web上でのビューファイルの表示とはGUIをクライアント側で起動させていることだったんですね。

 クライアントはビューファイルを使ってルーティングにリクエスを行っていることがわかりました

 ActionViewの考え方を後から知りましたが、エラーの原因特定には影響ないと判断しています。ビューファイルの記述に沿ってクライアントがルーティングにリクエストを飛ばすことには変わりないと思っています(2020年9月29日追記)

結論

 クライアントはビューファイルを使ってルーティングへのリクエストを行っているのだから、ルーティングエラーの原因になる。だからこそ、'Routing Error'が起きたらルーティングの記述をチェックした後、ビューファイルを見るべきだと理解できました。

所感

 理解してみると当たり前だし、理解している人からしても当たり前だと思います。でも自分は理解できていませんでした。だれかのMVCの理解に貢献できたらなと思いました。