2013-03-31 51 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。