ルーティングとは
Railsにおいてルーターとは、Webアプリケーションに対するリクエストの処理を担当する機能である。URIによるHTTPリクエストを、どのコントローラーの、どのアクションに渡すべきかを判断する。
ルータが行うアクションへの振り分け作業をルーティングと呼び、どのコントローラーのどのアクションを呼び出すかという振り分けの設定をルートと呼ぶ。
ルート設定には、configディレクトリにあるroute.rbというファイルを使用する。
HTTPメソッド
主なHTTPメソッド
メソッド | 目的 |
---|---|
GET | 情報をサーバーから取得する |
POST | 情報をサーバーに取り込む |
PUT | 情報を置き換える |
PATCH | 情報の一部を置き換える |
DELETE | 情報を削除する |
基本の書き方
Rails.application.routes.draw do
get "posts/new" => "posts#new"
post "posts/create" => "posts#create"
end
このように記述している場合、「posts/new」は、ドメイン:ポート番号/posts/newという宛先に相当し、「posts#new」は、PostsControllerのindexアクションであることを示している。
リソースフルルート
モデルを介したリソースに対するデータの追加、既存データの更新、削除、取得、および複数データの一覧表示といった、リソースを満たすルートをリソースフルルートと呼ぶ。
Railsではresourcesとして表現される。resourcesルートを設定すると、対象となるモデルに対する7つの標準的なアクションに対応するルートを一括して設定してくれる。
Userモデルに対するリソースフルルートを設定するには、route.rbに次のように記述する。
$ resources :users
この設定の結果、以下のルートが実装される。
Prefix | メソッド | URI | コントローラー#アクション | 処理 |
---|---|---|---|---|
users | GET | /users | users#index | 一覧画面表示 |
users | POST | /users | users#create | 登録処理 |
new_user | GET | /users/new | users#new | 新規画面表示 |
edit_user | GET | /users/:id/edit | users#edit | 編集画面表示 |
user | GET | /users/:id | users#show | 詳細画面表示 |
user | PATCH/PUT | /users/:id | users#update | 更新処理 |
user | DELETE | /users/:id | users#destroy | 削除処理 |
また、Railsでは1つのリソースに対するリソースフルルートとして、resourceルートが用意されている。
リソースフルルート以外のルートの設定方法
リソースフルルート以外のルートの設定には、getやpostを使用することができる。基本的にはこれらはHTTPメソッドに対応している。その際、リクエストされる宛先は 「URIパターン」として指示する。
設定の基本形式は次のようになる。
HTTPメソッド 'URIパターン', to:'コントローラーアクション'
ルートの実装は、
$ rails route
で確かめることができる。
ルーティングのネスト
Userモデルとその子モデルとしてのHobbyモデルを考える。それぞれのリソースに相当するデータベースのテーブル名は、usersとhobbiesになる。
親子関係のルートを入れ子にするには、親のリソースルートのブロックの中に、子のリソースルートを設定すればよい。
resources :users do
resources :hobbies
end
このように記述することで、どのuserに対してのhobbyであるかをルーティングで紐づけることができる。