2010-08-27 111 views
3
map.resource :basket, :collection => { :checkout => :post } 

以上不适用于资源,正如您所期望的那样,因为basket是资源(即单数)而不是资源,所以没有集合的概念,所有内容都应该限制在current_user。在这种情况下,用户拥有一篮子。如何将自定义路线添加到单身资源?

不过,我想,而不必诉诸于添加的路由另一行指定一个自定义路径,例如:

map.checkout 'basket/checkout', :controller => 'baskets', :action => 'checkout' 

这可能吗?

当然,我的其他选择是添加一个结帐控制器。

+0

我经常想知道同样的事情,并且我总是不得不求助于上面提到的手动命名路由,好Q! – brad 2010-08-27 15:51:40

回答

0

只需使用:member选项,而不是:collection

map.resource :basket, :member => {:checkout => :post} 
0

如果篮子是仅限用户我想使它成为一个嵌套的资源:

map.resources :users do |users| 
    users.resource :basket, :member => { :checkout => :post } 
end 

... or in Rails 3 ... 

resources :users do 
    resource :basket do 
    post :checkout, :on => :member 
    end 
end 

这样,你就可以将篮子的范围限定在正在结帐的用户。该网址最终会看起来像这样:

/users/5/basket/checkout 

您还会看到措辞很好的命名路由'checkout_user_basket'。

相关问题