如何使用包含但是限制使用包含参数的范围加载的内容进行Eager加载

时间:2012-04-18 23:01:32

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

好的我有以下型号

Class Company < ActiveRecord::Base 
has_many customers
active?

Class Customers < ActiveRecord::Base
belongs_to :Company
has_one :account

Class Account < ActiveRecord::Base
belongs_to :Customer
has_many :invoices

Class Invoice < ActiveRecord::Base
belongs_to :account
has_many :line_items
invoice_date

Class LineItem < ActiveRecord::Base
belongs_to:Invoice

我需要做的是检索: 所有有客户的活跃公司和这些客户的发票

这是擦: 由于每个客户都有大量的发票,我只想退货,请说明2012年4月1日的发票。

我想要做的是使用包含在模型上设置的范围或方法来限制返回的发票数量。

我的模型将包含范围:

Class Invoice < ActiveRecord::Base
belongs_to :account
scope :for_the_day_of, lambda{|invoice_date|where('invoices.invoice_date',invoice_date }

所以现在我可以这样写:

invoice = Invoice.for_the_day_of(Date.today).first

我真正想用它做的事情是:

comapanies = Company.where(:active => true)
.includes(:merchants => [:billing_account => 
[:invoices => for_the_day_of(Date.today) => :invoice_line_items]])

我不知道这在活动记录中是否可行,或者我只是在想错误的问题

非常感谢任何帮助。

由于

1 个答案:

答案 0 :(得分:1)

如果我正确理解,您需要从另一个模型和一些子查询功能访问的范围。 我正在使用gem Squeel进行此提议。这是伟大的宝石,扩展了Active Records功能。