2011-01-25 54 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