我有一个应用程序,企业可以提交税收和申请延税。 (扩展名是一个请求“我需要更多时间来提交。”)
我有以下关系:
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
时,它都会进行另一次数据库查询。
我在TaxFiling
和joins
添加了business_id
个year
扩展程序的范围,但我不确定如何让TaxFiling#extension
使用该{{1}}两个模型之间没有声明关系。
我该怎么做?
答案 0 :(得分:1)
我认为你想要的是.includes
方法,以便在最初加载TaxFiling模型时进行急切加载。如果您这样做:
TaxFiling.includes(:business => [:tax_extensions])
Rails会使用三个查询(每个模型一个)而不是N个查询将关联的业务和扩展加载到内存中。