ルーティングのcollectionとmemberについて
collectionとmemberの使い分けについて、ID取得必要かどうかで判断するとの説明が多く見かけて、理解が曖昧だったけど、stackoverflowの回答を見て、ようやく納得した内容をメモする。
結論
違いはrouteにidが付くか付かないかと言うより、個別リソースに対してのアクションなのか、リソース全体に対してのアクションなのか、ということ。
特定のリソースに対してのアクションの場合、memberを使う、そのリソースのIDを取得する
1
2
3
4
5
resources :photos do
member do
get 'preview'
end
end
生成URL例:
/photos/1/preview特定の写真のプレビューのため、その写真のidを取得する必要
生成するルーティングヘルパー:
preview_photo_path(photo)特定の写真リソースのため、単数形の
photoになる
リソース全体に対してのアクションの場合、 collectionを使う、個別リソースのID取得は不要
1
2
3
4
5
resources :photos do
collection do
get 'search'
end
end
生成URL例:
/photos/search写真全体に対しての検索行動のため、個別写真のidは取得不要
生成するルーティングヘルパー:
search_photos_path写真リソース全体のため、複数形の
photosになる
参照: difference between collection route and member route in ruby on rails?
This post is licensed under CC BY 4.0 by the author.