もこたんぺ Learning Note

自分が勉強する上でわからなかったことを理解を深めていくためにまとめていく。

現場Rails Chapter6 ルーティングについて

ルーティングとは

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


ルーティングを構成する5つの要素を理解する

HTTPメソッド(GET、POST、PATCH、PUT、DELETE)

・サーバへリクエストする際に指定するもの。
・情報の送信や取得する方法を表すもの。
・一般的にはブラウザから送ることができるのはGETとPOSTのみ
 Railsの場合、methodというパラメータの値に"PATCH"、"PUT"、"DELETE"という文字列が入ったPOSTリクエストをそれぞれPATCH、PUT、DELETEと解釈する。

URLパターン(/users, users/:id)

・定義したURLパターンごとに一意な名前をつける。
・対応するURLを生成するためのヘルパーメソッド
(new_user_path、new_user_urlなど)が用意されている。


コントローラ (usersではUsersController)

・呼び出したいアクションのコントローラクラスを指定する。


アクション(index, new, createなど)

・呼び出したいアクションを指定する。

 これらの要素がどの塔に利用されているのかを表したのが、下の図。
 もう一つの働き方として URLパターンに名前をつけておいてその名前を元にURLを簡単に生成するためのヘルパーメソッドを作り出す。

HTTPメソッド と URLパターン を指定して コントローラ の アクション を実行
【GET】     【/users】        →       【UsersController】   【index】
              ↓
              ↓
           URLパターン名 を指定して URLヘルパーメソッド を実行
            【users】         →     【users_path】


例:config/routes.rb

get '/login', to: 'sessions#new'

GETメソッドで"/login"というURLに対してリクエストが来たら

SessionsControllernewアクションを呼び出す。

また、'/login'というURLを'login_path'というヘルパーメソッドで生成できるようになる。

例:config/routes.rb

post '/login', to: 'sessions#create'

POSTメソッドで"/login"というURLに対してリクエストが来たら

SessionsControllercreateアクションを呼び出す。

また、GETと同様にURLパターン名はloginになる。
※URLパターン名はルートごとというより、URLパターンごとにつけるものと理解しておく。

実際にどのようなルーティングになっているかrails routesコマンドで確認する。

また、GET、POST以外で、patch, put, deleteの各HTTPメソッドに対応する定義が可能。
getなどの代わりにmatchと:viaオプションの組み合わせを使うと複数のHTTPメソッドを受け付ける定義ができる。

match 'login', to: 'sessions#create', via: [:post, :patch, :put]