如何在没有N + 1的情况下加入属于同一记录的两条记录?

时间:2012-02-03 20:26:42

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

我有一个应用程序,企业可以提交税收和申请延税。 (扩展名是一个请求“我需要更多时间来提交。”)

我有以下关系:

Business has_many :tax_filings (one per year)
TaxFiling belongs_to :business

Business has_many :tax_extensions (one per year)
TaxExtension belongs_to :business

当我显示税务申报清单时,我希望每个申请都显示是否有相应的延期。但是如果没有N + 1查询,我不知道该怎么做。

现在我在TaxFiling上有这个方法:

def extension
  TaxExtension.where(:business_id => business_id, :year => year).first
end

所以每当我调用TaxFiling#extension时,它都会进行另一次数据库查询。

我在TaxFilingjoins添加了business_idyear扩展程序的范围,但我不确定如何让TaxFiling#extension使用该{{1}}两个模型之间没有声明关系。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

我认为你想要的是.includes方法,以便在最初加载TaxFiling模型时进行急切加载。如果您这样做:

TaxFiling.includes(:business => [:tax_extensions])

Rails会使用三个查询(每个模型一个)而不是N个查询将关联的业务和扩展加载到内存中。