search
LoginSignup
0

More than 1 year has passed since last update.

posted at

updated at

【Rails】ルーティングの理解

ルーティングとは

Railsでは「どのようなURLへどのようなHTTPメソッドでアクセスされたら、どのコントローラーのどのアクションを呼び出したいか」をconfig/routes.rbに定義します。アクセスを受けて、適切なアクションへ案内する仕組みをルーティングと呼びます。

5つの構成要素

ルーティングは、リクエストをアクションへと誘導する「ルートの」集合と捉えることができます。1つの「ルート」は主に以下表の5つの構成要素から成り立ちます。

要素の名前 要素の内容の例 説明
HTTPメソッド GET、POSTなど サーバーへのリクエストで、情報の送信・受信の方法を表す。
URLパターン /posts /posts/:idなど URLそのものや、:idのように一部に任意の文字が入るパターンを定義する。
URLパターンの名前 new/post postsなど 定義したURLパターンごとに一意な名前をつける。この名前をもとに、対応するURL生成のためのヘルパーメソッドが用意される。
コントローラ posts(PostsController)など 呼び出したいアクションのコントローラークラスを指定する。
アクション indexなど 呼び出したいアクションを指定する。

次の図でこれらの要素がどのように利用されるかを表しました。基本的には①のように、HTTPメソッドとURLからアクションに案内しますが、もう一つの働きとして②のように、URLパターンに名前をつけておいて、その名前をもとにURLを簡単に生成するヘルパーメソッドを作り出します。

2D810555-5F04-4223-AFC8-6031F8CB62A1_1_105_c.jpeg

1つのルートの定義

では、実際に例を見てみましょう。homeコントローラーのtopアクションがアプリのトップページの説明を取得するとします。

config/routes.rb
get '/top', to: 'home#top'

この定義は次のような意味になります。


GETメソッドで、'/top'というURLに対してリクエストが来たら、HomeControllerのtopアクションを呼び出す。
また、'/top'というURLを、top_pathというヘルパーメソッドで生成できるようにする。


複数のHTTPメソッドを受け付けるルートの定義

HTTメソッドの記述の代わりに、mathと:viaオプションの組み合わせを使うと、複数のHTTPメソッドを受け付ける1つのルートを定義できます。
仮に、home#topをPATCHやPUTでリクエストされた際にも呼び出したい場合は以下のようになります。

match '/login', to: 'home#top', via: [:get, :patch, :put]

URLヘルパーメソッド以外の取得方法

ヘルパーメソッドでURLを得るには、以下の方法もあります。

  1. ”/posts”といった文字列を直接記述
  2. { Controller: :posts, action: :index }といったハッシュの利用

1の方法は、あとでそのアクションに対応するURLを変更する際に修正箇所が多くなること、URLの記述方法や本番サーバの運用設定でバグが起きる可能性があるため避けた方が良いでしょう。

終わりに

ルーティングの理解はつまずきがちですが、この記事が少しでも参考になれば幸いです。最初は、とにかく実装さえできれば大丈夫でしょう!

参考

現場で使える Ruby on Rails 5速習実践ガイド

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
What you can do with signing up
0