has_many:通过并获取相关项目

时间:2011-09-23 14:43:20

标签: ruby-on-rails ruby-on-rails-3 activerecord

这是此问题的后续行动has_many :through usage, simple, beginner question

基本上,我想在我的Invoice类中有一个函数来获取所有LineItem但是以下内容不起作用:

这样:

> @i=Invoice.find(1)      # good   
> @i.products             # good works well  
> @i.products.line_items  # not working, undefined method line_items  

根据前一个问题中的关联,这应该有效吗?如果我直接访问产品,我认为应该这样做:

> @p=Product.find(1)      # good  
> @p.line_items           # also good

如何根据此型号取回所有订单项?

THX

2 个答案:

答案 0 :(得分:3)

假设您有以下型号:

class Invoice
  has_many :line_items
  has_many :products, :through => :line_items
end

class LineItems
  belongs_to :invoice
  belongs_to :product
end

class Product
  has_many :line_items
  has_many :invoices, :through => :line_items
end

您可以执行以下操作:

  

@ i = Invoice.find(1)#good
  @ i.products#good good well
  @ i.line_items#与发票关联的所有line_items。

答案 1 :(得分:1)

@i.products会返回Product的集合。您需要收集所有订单项:

    @i.products.collect(&:line_items)