2011-01-25 8 views
1

私は期待どおりに熱心な読み込みができません。「両方向」の熱狂的な読み込み

私はバリアントをHAS_MANY製品、そしてもちろん製品 belongs_toの各バリアントを持っています。

私は、製品とそのすべてのバリエーションをロードするために、このようなコードを使用:

products = Product.includes(:variants) 

これは動作します:すべての製品およびすべての変異体が2つだけのクエリがロードされています。ただし、各バリアントの製品がロードされていないため、次のコードで別のSQLクエリが発生します。

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

なぜ、どのように修正できますか? Product.includes(:variants => :product)が動作すると思いますが、Product-dataがすでに利用可能であるため、1つの余計な大きすぎる不要なSQLクエリが発生します。

答えて

1

アクティブレコードは、指定したレベルで関連付けを読み込むだけです。その観点から、variant.productは別のレベルの関連付けとして扱われます。 、私は元の質問に書いたものだ

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

を私はまだ余分なSQLクエリを必要とすることを言ったように:あなたは熱心読み込み、それをしたいのであれば、あなたは何をする必要があるだろう。 – Jonatan

関連する問題