ChatGPT解决这个技术问题 Extra ChatGPT

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

Rails 中的收集路线和成员路线有什么区别?

例如,

resources :photos do
  member do
    get :preview
  end
end

相对

resources :photos do
  collection do
    get :search
  end
end

我不明白。


T
Theo

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


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

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

member {get 'preview'} 将生成:

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

collection {get 'search'} 将生成:

search_photos_path # /photos/search

注意复数!


N
Nithin

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]


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