勉強前
・ルーティングの自動生成ってどうやったら何が生成される?
resources?でなんかCRUD操作用のパスが追加される?
・ルーティング用ヘルパーがいっぱいあるように見えて整理がつかない...
xxx_path?xxx_url?xxxには何が入る?
名前付きルーティング
routes.rbの記述
- 特定のパスへのリクエストを特定のcontrollerのメソッドに割り当てる
- controller(xxx_controller.rb)とメソッドを作成
- routes.rbにルーティング設定を記述
紐づけは命名規則によって行われる。
例).../patients/{id} へのGETリクエストをルーティング
def show
# リクエストに対する処理
end
get '/patients/:id', to: 'patients#show'
get '/patients/:id' => 'patients#show'
ヘルパーの利用
・patients_path(リソース名+_path) → /patients
を取得できる
_pathでなく_urlを使うとURL(ホスト名 + ポートも含む)を取得できる
ルーティング設定の自動生成
resources宣言
routes.rbの記述
下記を宣言することで、CRUD操作にあたる各HTTPメソッドのアクション & 各アクションの入り口となるページについてのルーティングが自動生成される。
resources :photos
HTTPメソッド | 生成されるパス | 紐づけ先のcontroller#メソッド | メソッドの役割 |
---|---|---|---|
GET | /photos | photos#index | 一覧ページ表示 |
GET | /photos/new | photos#new | 新規登録ページ表示 |
POST | /photos | photos#create | 新規登録 |
GET | /photos/:id | photos#show | 特定の写真のページ表示 |
GET | /photos/:id/edit | photos#edit | 写真情報の更新・編集ページ表示 |
PATCH/PUT | /photos/:id | photos#update | 写真情報の更新 |
DELETE | /photos/:id | photos#destroy | 写真の削除 |
各アクションのルーティング先のメソッドでは、操作の後にどこかしらのページにリダイレクトさせる処理を書く(操作後にどのページを表示すれば良いか示してあげる)必要があることが多い。
ヘルパーの利用
ヘルパー | 返るパス |
---|---|
photos_path | /photos |
new_photos_path | /photos/new |
edit_photos_path(:id) | /photos/:id/edit |
photo_path(:id) | /photos/:id |
resource宣言
routes.rbの記述
resource :user
※resource :{単数形}
これも、resources宣言同様ルーティングが自動生成される。
resourcesとの違いは
・操作するリソースが1つしかない前提になる(リソース名の表現が単数形になる)
→パスパラメータ(:id)を含むパスはない + 一覧表示ページのパスもない
ヘルパーの利用
resourcesと同様。当然これも単数形のみ。
まとめ
- resources:{リソース名(複数名詞)} → CRUD操作とCRUD操作をするためのページ用のルーティング設定(このパス・HTTPメソッドへのリクエストはこのcontrollerのこのメソッドで受けられます)が自動生成される
- resources:{リソース名(単数形)} → resourcesと同じ。ただし複数リソース前提のパスはなくなる
- ヘルパー
- {(命名規則に沿ったパスの名前)}_url → 完全なurlを返す
- {(命名規則に沿ったパスの名前)}_path → urlのホスト名より後を返す
勉強後
整理にあたっては下記あたりを押さえる必要があった。
・resource(s)で生成されるルーティング設定には、ページ(View)表示用のものとCRUD処理用のものとがあること
・パスを返すヘルパーは2種類:xxx_path、xxx_url
・xxxに入るのは、自動生成されたルーティング設定に紐づくパス名(命名規則に沿って自動生成されるので、覚えたり調べたりする必要がある)
ルーティングのネストやグループ化については使う場面が来たら加筆しよう...
参考
Rails のルーティング-Railsガイド(v7.1)