🕊️
【Rails】Routing : member vs collection
memberとcollectionの違い
どちらもルーティング(Routing)で、リソース(resouces)でパスを増やしたい場合に使用する。
違いを表にまとめると次の通り。
member(メンバルート) | collection(コレクションルート) | |
---|---|---|
ルーティング定義 | 1つのデータに対してアクション | 全てのデータに対してアクション |
URLパターン | /resource/:id/action | /resources/action |
使用例 | 特定のユーザーのプロフィール表示 | 全てのユーザーの一覧表示 |
HTTPメソッド | GET/POST/PATCHなど | 一般的にGET |
アクション名 | show、edit、updateなど | indexなど |
それぞれについて解説する。
member
memberは、特定のリソース(データの集まり)の1つの個別の要素(1つのデータ)に対して処理を行うためのルートを定義する際に使う。つまり、1つのデータに対して行う処理を定義することができる。 例えば、特定のユーザーのプロフィールを表示する、特定の投稿を編集する、特定の商品を削除するなどの場合に使う。
具体例:
routes.rb
# routes.rb
resources :users do
member do
get :profile
end
end
これにより、以下のようなパスができる。
GET /users/:id/profile
このprofileアクションは、特定のユーザー(IDによって指定)に対して処理を行うアクション。このようにmemberを使うことで、1つのデータに対して行う処理をするためのルートを追加できる。
collection
collectionは、複数のリソース(データの集まり)に対してアクションを行うためのルートを定義する。つまり、全てのデータに対して行う処理に使用する。 例えば、全ての投稿を一覧表示する、全てのユーザーを表示するなどの場合に使う。
具体例:
routes.rb
resources :posts do
collection do
get :all_posts
end
end
これにより、以下のようなパスができる。
GET /posts/all_posts
上記の例では、/posts/all_posts
というURLで全ての投稿を一覧表示するためのアクションを定義している。このようにcollectionを使うことで、複数のデータに対して処理を追加できる。
Discussion