Mongoid,复杂查询,类似于has_many:through

时间:2012-08-22 08:25:03

标签: ruby-on-rails mongodb mongoid

我有以下型号:

class Company
  # ...
  has_many :invoices
end

class Invoice
  # ...
  belongs_to :company
  has_many :items

  field :type, String

  scope :expense, where(type: 'expense')
  scope :income, where(type: 'income')
end

class Item
  # ...
  belongs_to :invoice
end

问题是如何获取给定公司的所有income项目?

类似于company.items.expense

的内容

1 个答案:

答案 0 :(得分:-1)

使用嵌入式关系不会有任何区别。调用company.items.expense仍会返回错误,因为company.items会返回一个数组。

尝试这样的事情:

class Company
  #...
  def expenses
     self.invoices.where(type: 'expense')
  end

  def incomes
     self.invoices.where(type: 'income')
  end
end

然后,您可以拨打company.expensescompany.incomes

根据您的使用情况,您可能会发现在Item中嵌入Invoice或将其作为单独的集合保留更好。此外,由于您正在处理发票,请务必小心处理您的回调并在必要时将其级联,因此如果Invoice发生更改,Item修改时间会发生变化。