答案 0 :(得分:32)
不同之处在于生成的网址 让我们猜三个资源:
map.resources :users, :collection => { :rss => :get }
map.resources :users, :member => { :profile => :get }
map.resources :users, :new => { :draft => :get }
第一条路线将创建:
/users/rss
控制器名称和操作名称之间没有任何内容。我们不需要任何其他参数来获取用户列表rss feed。
第二个将创建动作“profile”作为对象的成员。所以我们将:
/users/1/profile
“1”是用户的to_param
。我们需要用户的ID来显示个人资料。
第三个将创建动作“草稿”作为新动作的成员。所以我们将:
/users/new/draft
“草稿”操作会在接受创建之前显示用户草稿。
这就是:collection,:member和:new之间的区别。他们每个人都创造了不同的路线,每个路线都有自己的目的。
答案 1 :(得分:9)
:member
使用模式/:controller/:id/:your_method
:collection
使用模式/:controller/:your_method
:new
使用模式/:controller/:your_method/new
创建路径(请注意路径的最后一个元素,即new
是常量)
New
与Collection
的不同之处主要在于意识形态层。这就是REST专家在更大的资源中看到REST“子资源”的创建方式。
答案 2 :(得分:2)
在http://guides.rubyonrails.org/routing.html上对rails路由指南中的ruby进行了非常好的阅读。它解释了从内到外的路由,然后再返回。第3.11.3节(添加新路由)描述了:new的用途,它与:member和:collection非常不同。
基本上是map.resources:photos,:new => {:upload => :post}将使用POST HTTP动词创建/ photos / upload。