在rails中使用has_one的嵌套路由

时间:2010-07-02 05:31:41

标签: ruby-on-rails nested-routes

G'day伙计们,

目前在Rails路由方面存在一些问题。

拥有一个顶级资源:/ Customer /其本身只有一个/ Quote / resource

引号可以包含first_resources和second_resources

是与引号相关的资源集合

构建路由,但如何在has_one路由下嵌套多条路由?

map.resources :customer, :has_one => :quote

我该怎么做?

quote.resources :first_resources
quote.resources :second_resources

将它们作为子元素映射到子结构?

或者以不同的方式管理集合会更容易吗?

2 个答案:

答案 0 :(得分:4)

为此,我会在一个街区内筑巢:

map.resources :customers do |customer|
  customer.resource :quote do |quote|
    quote.resources :first_resources
    quote.resources :second_resources
  end
end

替代语法:

map.resources :customers do |customer|
  customer.resource :quote, :has_many => [:first_resources, :second_resources]
end

这会给你

的网址
customers/:customer_id/quote/first_resources/:id
customers/:customer_id/quote
customers/:id

或者您提供的方式我认为您需要映射复数引号,以便在您不想嵌套时能够获得特定报价

map.resources :customers, :has_one => :quote
map.resources :quotes, :has_many => [:first_resources, :second_resources]

会给你

的网址
customers/:customer_id/quote
customers/:id
quotes/:quote_id/first_resources/:id

我认为第一个是你所追求的。希望这会有所帮助。

资源:http://api.rubyonrails.org/classes/ActionController/Resources.html

答案 1 :(得分:0)

map.resources:customers,:has_one => :报价

map.resource:quote,:has_many => :first_resources

map.resource:quote,:has_many => :second_resouces