1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-03-28

#ルーティングとは
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に対してリクエストが来たら、__Home__Controllerの__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速習実践ガイド

1
1
0

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
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?