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

nev*_*ame 272 ruby ruby-on-rails

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

例如,

resources :photos do
  member do
    get :preview
  end
end
Run Code Online (Sandbox Code Playgroud)

resources :photos do
  collection do
    get :search
  end
end
Run Code Online (Sandbox Code Playgroud)

我不明白.

The*_*heo 397

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

  • 您确定创建成为成员操作吗?没有ID可以通过. (6认同)
  • @YoniGeek.不正确.请参阅http://guides.rubyonrails.org/routing.html,2.7嵌套资源.在添加到集合时,Create始终是集合操作.请注意,指定的创建路径始终为复数.在您的示例中,您要为属于帖子成员的投票集合添加新投票.id指的是成员帖子,而不是正在创建的投票集合.例如,命名路径为posts_votes_url. (6认同)

Ami*_*tel 211

                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)
Run Code Online (Sandbox Code Playgroud)

  • 最有价值的帖子! (38认同)
  • 应该使用“search_photos_path”而不是“search_photos_url”,这样人们就不会认为“_path”和“_url”是两者之间的区别。 (2认同)

tyb*_*103 31

西奥的答案是对的.为了文档的缘故,我还要注意这两个将生成不同的路径助手.

member {get 'preview'} 会产生:

preview_photo_path(@photo) # /photos/1/preview
Run Code Online (Sandbox Code Playgroud)

collection {get 'search'} 会产生:

search_photos_path # /photos/search
Run Code Online (Sandbox Code Playgroud)

注意多个!


Bee*_*tty 13

1) :collection - 为对集合进行操作的其他操作添加命名路由.采用#{action} => #{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]