ruby on rails中收集路线和会员路线的区别?

Posted

技术标签:

【中文标题】ruby on rails中收集路线和会员路线的区别?【英文标题】:difference between collection route and member route in ruby on rails? 【发布时间】:2011-03-03 00:02:18 【问题描述】:

Rails 中的集合路由和成员路由有什么区别?

例如,

resources :photos do
  member do
    get :preview
  end
end

resources :photos do
  collection do
    get :search
  end
end

我不明白。

【问题讨论】:

【参考方案1】:

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

【讨论】:

创建动作怎么样?假设我想替代“创建” - 它可以算作成员吗? 是的,创建是一个成员操作。 但是添加一个没有任何块的“get”呢?是会员还是收藏路线?我的测试显示了它的集合,但具有不同的 id 变量名称。 您确定要创建会员操作吗?没有身份证可以通过。 @YoniGeek。不正确。请参阅guides.rubyonrails.org/routing.html,2.7 嵌套资源。当您添加到集合中时,创建始终是一个集合操作。请注意,命名的创建路径始终是复数。在您的示例中,您正在向属于帖子成员的投票集合添加新投票。 id 指的是成员帖子,而不是正在创建的投票集合。命名路径将是 posts_votes_url,例如。【参考方案2】:
                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)

【讨论】:

应该使用search_photos_path而不是search_photos_url,这样人们就不会认为_path_url是两者之间的区别。【参考方案3】:

西奥的答案是正确的。出于文档的考虑,我还想指出,这两者会生成不同的路径助手。

member get 'preview' 会生成:

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

collection get 'search' 将生成:

search_photos_path # /photos/search

注意复数!

【讨论】:

【参考方案4】:

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]

【讨论】:

很好的例子。不过,顶部的解释可能会更好。

以上是关于ruby on rails中收集路线和会员路线的区别?的主要内容,如果未能解决你的问题,请参考以下文章

ruby on rails 路线

Ruby on Rails - 如何为同一操作添加第二条路线?

Ruby on Rails 6 - 如何根据特定路线建模/隐藏视图?

Ruby on Rails 和 Datatables.net

Ruby on Rails 路由到控制器

ruby on rails 中的控制器和动作有啥区别?