🧏♂️
[routing]collection doとmember doは何が違うの?
ルーティングを記載しているとき、collection do~で記載したらうまく動かず調べたらmember doで、どっちも見たことあるけどちゃんと説明できないなと思って、、、
collection と member の違い・用途
collection と member は、どちらも Rails のルーティングでカスタムアクションを追加するために使いますが、それぞれの用途と生成されるパスが異なります。
member
- 特定の 1つのリソース(個別のオブジェクト)に対してアクションを実行する場合に使います。
- URLにはリソースのidが含まれる。
例
resources :tasks do
member do
patch 'update_status'
end
end
ここで:idは、個別のタスクのIDを示します。
このルーティングは、特定のタスクの状態を変更するときに使う。
この場合、生成されるURLは次のようになります。
URL例
PATCH /tasks/:id/update_status
collection
- リソース全体に対してアクションを実行する場合に使います(個別のオブジェクトではなく、複数または全体を対象にする場合)。
- URLにはリソースのidが含まれない。
例
resources :tasks do
collection do
get 'search'
end
end
このルーティングは、特定のタスクではなく、タスク全体に対して検索を実行する場合などに使います。
この場合、生成されるURLは次のようになります。
コード例
GET /tasks/search
まとめ
それぞれのケースに応じて適切な方法を選ぶと、ルーティングがわかりやすくなります。
Discussion