【初心者向け】Ruby on rails  ルーティングエラーは怖くない!

プログラム

Ruby on Railsでプログラムを書いていていると最初から完璧にコードが書くのは難しく、文法やル―ルに合ってないとエラーがでます。
エラーがでると何から手をつけるか悩んでしまいます。

しかしながら、エラーの意味がわかると、解決が早くなります

この記事では、。Routesに書かれているルールの意味と、どのような時にエラーが発生するかをまとめました。記事を読むことで、エラーがでても、落ち着いて対応することができるようになります。

Routesの意味を確認しましょう。

簡単なBLOGアプリに記事を投稿するプログラミングを書きながらエラーを発生させて解決してみます。
routesにresources : articlesと投入してみましょう。

こうすることで、articlesというリソースへアクセスできるようになります。また、articlesモデルにアクセスできます。と同時にURLを生成してくれます。

リソースベースのルーティングとは公式ホームぺ―ジにはこのように書かれています。
リソースベースのルーティング (以下リソースルーティング) を使うことで、リソースベースで構成されたコントローラに対応する共通のルーティングを手軽に宣言できます。リソースフルなルーティングを宣言することで、コントローラのindex、show、new、edit、create、update、destroyアクションを個別に宣言しなくても1行で宣言が完了します。

Web上のリソース
ブラウザはRailsに対してリクエストを送信する際に、特定のHTTPメソッド (GET、POST、PATCH、PUT、DELETEなど) を使って、URLに対するリクエストを作成します。上に述べたHTTPメソッドは、いずれもリソースに対して特定の操作の実行を指示するリクエストです。リソースルーティングでは、関連するさまざまなリクエストを1つのコントローラ内のアクションに割り当てます。

Railsアプリケーションが以下のHTTPリクエストを受け取ったとします。

DELETE /photos/17
このリクエストは、特定のコントローラ内アクションにマッピングさせるようルーターに要求しています。最初にマッチしたのが以下のルーティングだとします。

resources :photos
Railsはこのリクエストをphotosコントローラ内のdestroyアクションに割り当て、paramsハッシュに{ id: ’17’ }を含めます。
2.2 CRUD、動詞、アクション
Railsのリソースフルルーティングでは、(GET、PUTなどの) 各種HTTP動詞 (verb) と、コントローラ内アクションを指すURLが対応付けられます。1つのアクションは、データベース上での特定のCRUD (Create/Read/Update/Delete) 操作に対応付けられるルールになっています。たとえば、以下のようなルーティングが1つあるとします。
resources :photos
上の記述により、アプリケーション内に以下の7つのルーティングが作成され、いずれもPhotosコントローラに対応付けられます。

HTTP動詞 パス コントローラ#アクション 目的
GET /photos photos#index    すべての写真の一覧を表示
GET /photos/new photos#new   写真を1つ作成するためのHTMLフォームを返す
POST /photos photos#create    写真を1つ作成する
GET /photos/:id photos#show    特定の写真を表示する
GET /photos/:id/edit photos#edit 写真編集用のHTMLフォームを1つ返す
PATCH/PUT /photos/:id photos#update 特定の写真を更新する
DELETE /photos/:id photos#destroy 特定の写真を削除する

詳しくは、Railsガイドを参照してください。
Railsのルーティング Rails ガイド

実際にどのようになるかrails routesで確認してみましょう。

>rails routes

真ん中の列は、URLに打ち込む文字です。

articlesとブラウザに打つと、articlesコントローラのindexアクションが実行されます。
articles/newと打つとarticlesコントローラのnewアクションが実行されます。
resources : articlesとroutesに書くことで、このようなルールが設定されます。
そしてrails routesコマンドで確認することができます。

>rails routes

controllerでのエラー

これでURLのリソースが生成されているはずです。それでは、articles/new とたたいてみましょう。
ここからは、controllerやviewと言う言葉がでてきます。初心者の方は、URLに投入してから表示するまでについては、こちらの記事をご覧ください。

参考記事:【初心者向け】Ruby on rails MVC とブラウザの関係を簡単解説!


すると、エラーがでます。

articles controllerがないという意味です。
では、controllerを作成します。

>rails g controller articles

controllerはarticles  articlesと複数形にしてください。
controllerが作られました。

それではもう一度、URLをたたいてみましょう。
今度はエラーが異なりました。Unknown action

アクションがありませんよ、というエラーです。
実際、controllerの中にはありませんね。controllerを作った時点では、アクションは書かれていません。

アクションを呼び出しているのにnewがありませんのでエラーとなりました。
では、アクションを作りましょう。

もう一度みてみます。

viewsでのエラー

今度は、別のエラーがでました。

Formatがないというエラーです。Formatとは、URLですね。viewsの中にtempleがないと言っています。
newアクションはviewを選び出すのですがどこを見にいくかというと、viewsのarticlesフォルダーの中のnew.html.erbを探しいいっています。しかしながら何もないのでエラーが出ました。

では作ります。
エディターで新規でファイルを作成し、保存先を、veiwsのarticlesフォルダーの中に
new.html.erbとして保存します。

helloと表示してみましょう。
先ほど、作成したnew.html.erbにコートを書きます。

それでは、もう一度リロードしてみましょう。
helloと表示されました。

まとめ

  • Routesの意味を確認しましょう。
    リソースルーティングを使うことで、リソースベースで構成されたコントローラに対応する共通のルーティングを手軽に宣言できます。
  • controllerでのエラー
    controllerを作った時点では、アクションは書かれていません。
  • viewでのエラー
    controllerで作ったアクション名のviewファイルがないと画面に表示されません。

routesの意味を確認し、エラー内容を理解してエラーを早期に解決しましょう。