有什么区别:new,:collection和:成员路线?

时间:2009-11-03 12:49:06

标签: ruby-on-rails rails-routing

我读过documentation,但我仍然不确定我是否了解所有内容。

特别是为什么有一个:new参数。据我了解,它可以替换为:collection参数。

那么这三种路线之间的区别是什么?

3 个答案:

答案 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是常量)

NewCollection的不同之处主要在于意识形态层。这就是REST专家在更大的资源中看到REST“子资源”的创建方式。

答案 2 :(得分:2)

除了关于:新

的部分之外,Damiens的解释大多是正确的

http://guides.rubyonrails.org/routing.html上对rails路由指南中的ruby进行了非常好的阅读。它解释了从内到外的路由,然后再返回。第3.11.3节(添加新路由)描述了:new的用途,它与:member和:collection非常不同。

基本上是map.resources:photos,:new => {:upload => :post}将使用POST HTTP动词创建/ photos / upload。