2011-01-25 59 views
1

急于加载并不如我所期望的那样工作。急于在“双向”加载

产品是HAS_MANY 变种,当然每个 belongs_to的一个产品

我用这样的代码加载一个产品及其所有变种:

products = Product.includes(:variants) 

这个工作:所有产品及所有变体仅加载两个查询。然而,每一个变种的产品不加载,所以下面的代码导致另一个SQL查询:

puts products[0].variants[0].product.title 

这是为什么,我该如何解决?我想Product.includes(:variants => :product)可以工作,但是它会导致一个额外的大而不必要的SQL查询,因为产品数据已经可用。

回答

1

活动记录将只在您指定的级别上加载关联。在其观点中,variant.product将被视为另一级关联。所以,如果你想急于加载它,你必须这样做:

products = Product.includes({:variants => :product}) 
+0

这就是我在原始问题中写的,但正如我所说,仍然需要额外的SQL查询。 – Jonatan 2011-01-25 12:01:23