【Rails】リソースフルルートにおけるpath_names,as,collection,memberオプションを分かりやすく整理する

プログラミング

【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_pathGET/studies/searchstudies#search検索画面
download_study_pathGET/studies/:id/downloadstudies#downloadダウンロード機能
studies_pathGET/studiesstudies#index一覧照会画面
new_study_pathGET/studies/newstudies#new新規登録画面
POST/studiesstudies#create登録処理
edit_study_pathGET/studies/:id/editstudies#edit編集画面
PATCH/studies/:idstudies#update更新処理
PUT/studies/:idstudies#update更新処理
study_pathGET/studies/:idstudies#show詳細画面
DELETE/studies/:idstudies#destroy削除処理
studiesのルートに「search」と「download」を追加

上記の表を見ると、memberオプションでは、パスに「:id」が含まれている事が分かります。これをメンバールートと言い、「:id」一件に対する独自のルートが定義できます。

collectionオプションによって定義されたルートには「:id」は含まれていません。これをコレクションルートと言い、複数件に対する独自のルートが定義できます。

このように、リソースフルルートに独自ルートを追加できるので、Railsのルートは自由にカスタマイズできますね。