0

直升机,

我的查询:

@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

知道如何在一个查询中从数据库中获取所有数据吗?

谢谢

4

1 回答 1

0

我认为您需要使用include而不是joins获得急切的加载。关于差异有一个很好的 railscasts 插曲:http ://railscasts.com/episodes/181-include-vs-joins ,特别是:

我们需要问的问题是“我们是否使用了任何相关模型的属性?” 在我们的例子中,答案是“是”,因为我们会针对每条评论显示用户名。这意味着我们希望在检索评论的同时获取用户,因此我们应该在这里使用 include。

于 2013-03-31T18:02:34.280 回答