【问题标题】:difference between collection route and member route in ruby on rails?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

我不明白。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案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]

      【讨论】:

      • 很好的例子。不过,顶部的解释可能会更好。
      猜你喜欢
      • 2011-02-15
      • 2011-10-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多