2013-03-31 89 views
0

直升機,Rails的.joins不會加載該協會

我的查詢:

@county = County.joins(:state) 
     .where("counties.slug = ? AND states.slug = ?", params[:county_slug]) 
     .select('states.*, counties.*') 
     .first! 

從日誌中,SQL是這樣的:

SELECT states.*, counties.* FROM "counties" INNER JOIN "states" ON "states"."id" = "counties"."state_id" LIMIT 1 

我的問題是,是不會急於從關聯的表(狀態)加載數據,因爲當我這樣做時,例如@ county.state.name,它會運行另一個查詢,但是,從日誌中可以看到,它已經查詢過數據庫也用於該表中的數據。但它不預先填充@ county.state

任何想法如何我只能從一個查詢中獲取數據庫中的所有數據?

THX

回答

0

我認爲你需要使用include而不是joins獲得預先加載。有一個關於差異的良好railscasts插曲:http://railscasts.com/episodes/181-include-vs-joins,特別是:

我們需要的是「?是我們使用任何相關模型的屬性的」在我們的情況下,答案是「是」爲問這樣的問題,我們'根據每條評論顯示用戶的姓名。這意味着我們希望在檢索評論的同時獲取用戶,因此我們應該在這裏使用include。