铁路上的红宝石的收集路线和会员路线之间的区别?


278

Rails中的集合路线和成员路线之间有什么区别?

例如,

resources :photos do
  member do
    get :preview
  end
end

resources :photos do
  collection do
    get :search
  end
end

我不明白

Answers:


407

成员路由将需要一个ID,因为它作用于member。集合路由不是因为它作用于对象集合。预览是成员路线的示例,因为它作用于(并显示)单个对象。搜索是收集路径的一个示例,因为它作用于(并显示)对象集合。


那创建动作呢?假设我想替代“创建”-它会算作会员吗?
digitalWestie 2011年

1
是的,创建是成员操作。
Theo

1
但是,添加没有任何障碍的“获取”呢?是会员还是领取路线?我的测试显示了其集合,但具有不同的id变量名称。
lzap 2011年

6
您确定要创建成为成员操作吗?没有要传递的ID。
邵逸夫

6
@YoniGeek。不正确。请参阅guides.rubyonrails.org/routing.html 2.7嵌套资源。当您添加到集合时,创建始终是一个集合动作。请注意,命名的创建路径始终为复数。在您的示例中,您正在将新投票添加到属于帖子成员的投票集合中。id是指成员帖子,而不是要创建的投票集。例如,命名路径为posts_votes_url。
乔治·萧

217
                URL                 Helper                      Description
----------------------------------------------------------------------------------------------------------------------------------
member          /photos/1/preview   preview_photo_path(photo)   Acts on a specific resource so required id (preview specific photo)
collection      /photos/search      search_photos_path          Acts on collection of resources(display all photos)

39
最有价值的帖子!
aldo.roman.nurena 2013年

1
应该使用search_photos_path代替而不是search_photos_url使人们不会思考_path_url并且两者之间是有区别的。
约书亚·品特

31

西奥的答案是正确的。为了文档的缘故,我还要指出,两者将生成不同的路径帮助器。

member {get 'preview'} 将产生:

preview_photo_path(@photo) # /photos/1/preview

collection {get 'search'} 将产生:

search_photos_path # /photos/search

注意复数!


14

1) :collection-为在集合上执行的其他操作添加命名路由。接受的哈希值#{action} => #{method},其中method是:get/:post/:put/:delete,先前方法中的任何一个的数组;如果方法无关紧要,则使用:any 的哈希。这些路由映射到诸如/ users / customers_list之类的URL ,以及一个customers_list_users_url路由。

map.resources:users,:collection => {:customers_list =>:get}

2):member-与相同:collection,但适用于在特定成员上执行的操作。

map.resources:users,:member => {:inactive =>:post}

它被视为 /users/1;inactive=> [:action => 'inactive', :id => 1]


很好的例子。顶部的解释可能会更好。
hitesh israni
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.