【Rails】リソースフルルートにおけるpath_names,as,collection,memberオプションを分かりやすく整理する
どうも、てーやまです。
前回に引き続き、Railsのルーティング「リソースフルルートにおけるオプション」を整理していきたいと思います。
「only,except,controller,path」オプションについては前回の記事をどうぞ。
今回は「path_names,as,collection,member」の各オプションを、分かりやすく整理していこうと思います。
リソースフルルートにおけるオプションの実用性
リソースフルルートは、たった1行で標準的なHTTPメソッドに対するルートを定義できるので非常に便利です。
しかし、それに対して独自のルートを設定したい場合もあり、その為に今回整理するオプションが用意されています。
今回整理するオプションを使うと、以下のように機能が拡張できます。
- URL(パス)の「new」「edit」等の標準部分の変更
- ルーティングヘルパーのプレフィックスの変更
- 独自ルートの定義
path_names
pathオプションを使うとパスの一部分が変更できました。
例えば以下のようにです。
resources :studies, path: :student
ルーティング ヘルパー |
HTTPメソッド | パス | コントローラ# アクション |
機能 |
studies_path | GET | /student | studies#index | 一覧照会画面 |
new_study_path | GET | /student/new | studies#new | 新規登録画面 |
POST | /student | studies#create | 登録処理 | |
edit_study_path | GET | /student/:id/edit | studies#edit | 編集画面 |
PATCH | /student/:id | studies#update | 更新処理 | |
PUT | /student/:id | studies#update | 更新処理 | |
study_path | GET | /student/:id | studies#show | 詳細画面 |
DELETE | /student/:id | studies#destroy | 削除処理 |
※通常であればパスは「/studies」となるはずですが、pathオプションにより「/student」に変更されています。
そして、path_namesオプションを指定すると、上記の「/new」,「/edit」を任意の値に変更することができます。
resources :studies, path_names: {new: 'make', edit: 'change'}
ルーティング ヘルパー |
HTTPメソッド | パス | コントローラ# アクション |
機能 |
studies_path | GET | /studies | studies#index | 一覧照会画面 |
new_study_path | GET | /studies/make | studies#new | 新規登録画面 |
POST | /studies | studies#create | 登録処理 | |
edit_study_path | GET | /studies/:id/change | studies#edit | 編集画面 |
PATCH | /studies/:id | studies#update | 更新処理 | |
PUT | /studies/:id | studies#update | 更新処理 | |
study_path | GET | /studies/:id | studies#show | 詳細画面 |
DELETE | /studies/:id | studies#destroy | 削除処理 |
as
ルーティングヘルパーのプレフィックスを変更できます。
resources :studies, as: :student
ルーティング ヘルパー |
HTTPメソッド | パス | コントローラ# アクション |
機能 |
student_index_path | GET | /student | studies#index | 一覧照会画面 |
new_student_path | GET | /student/new | studies#new | 新規登録画面 |
POST | /student | studies#create | 登録処理 | |
edit_student_path | GET | /student/:id/edit | studies#edit | 編集画面 |
PATCH | /student/:id | studies#update | 更新処理 | |
PUT | /student/:id | studies#update | 更新処理 | |
student_path | GET | /student/:id | studies#show | 詳細画面 |
DELETE | /student/:id | studies#destroy | 削除処理 |
collection,member
リソースフルルートの中に独自のルートを追加できます。
対象のモデルに対する独自のルートという位置付けのため、リソースフルルートの一部として一括管理できるメリットがあります。
resources :studies do
collection do
get 'search'
end
member do
get 'download'
end
end
ルーティング ヘルパー | HTTPメソッド | パス | コントローラ# アクション | 機能 |
search_studies_path | GET | /studies/search | studies#search | 検索画面 |
download_study_path | GET | /studies/:id/download | studies#download | ダウンロード機能 |
studies_path | GET | /studies | studies#index | 一覧照会画面 |
new_study_path | GET | /studies/new | studies#new | 新規登録画面 |
POST | /studies | studies#create | 登録処理 | |
edit_study_path | GET | /studies/:id/edit | studies#edit | 編集画面 |
PATCH | /studies/:id | studies#update | 更新処理 | |
PUT | /studies/:id | studies#update | 更新処理 | |
study_path | GET | /studies/:id | studies#show | 詳細画面 |
DELETE | /studies/:id | studies#destroy | 削除処理 |
上記の表を見ると、memberオプションでは、パスに「:id」が含まれている事が分かります。これをメンバールートと言い、「:id」一件に対する独自のルートが定義できます。
collectionオプションによって定義されたルートには「:id」は含まれていません。これをコレクションルートと言い、複数件に対する独自のルートが定義できます。
このように、リソースフルルートに独自ルートを追加できるので、Railsのルートは自由にカスタマイズできますね。
ディスカッション
コメント一覧
まだ、コメントがありません