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 6 - 如何根据特定路线建模/隐藏视图?