map.resource :basket, :collection => { :checkout => :post }
上面的内容不适用于资源,正如您所期望的那样,因为basket是一种资源(即单数)而不是资源,因此没有集合的概念,所有内容都应限定为current_user。在这种情况下,用户has_one篮子。
但是,我想指定一个自定义路线,而不必在路线中添加另一条线,例如:
map.checkout 'basket/checkout', :controller => 'baskets', :action => 'checkout'
这可能吗?
当然我的另一个选择是添加一个结账控制器。
答案 0 :(得分:0)
只需使用:member
选项代替:collection
:
map.resource :basket, :member => {:checkout => :post}
答案 1 :(得分: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
通过这种方式,您可以将购物篮的范围扩展到正在结帐的用户。该URL最终将如下所示:
/users/5/basket/checkout
你也可以获得措辞好的命名路线'checkout_user_basket'。