如何向单例资源添加自定义路由?

时间:2010-08-27 15:42:31

标签: ruby-on-rails routes

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

上面的内容不适用于资源,正如您所期望的那样,因为basket是一种资源(即单数)而不是资源,因此没有集合的概念,所有内容都应限定为current_user。在这种情况下,用户has_one篮子。

但是,我想指定一个自定义路线,而不必在路线中添加另一条线,例如:

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

这可能吗?

当然我的另一个选择是添加一个结账控制器。

2 个答案:

答案 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'。