🕊️

【Rails】Routing : member vs collection

2023/07/21に公開

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