【问题标题】:Can we do eager loading with joins?我们可以使用连接进行急切加载吗?
【发布时间】:2013-11-30 06:32:32
【问题描述】:

我知道includes 渴望加载所有关联的模型属性,例如:

@posts = Post.includes(:user)

将为每个帖子加载具有所有用户属性(姓名、出生日期、登录 ....)的所有帖子

如果我是对的,我们不能使用带有包含的 select 来获取像这样的一些属性:

@posts = Post.includes(:user).select("posts.*, user.name as user_name")

所以,通过连接可以使用 select :

posts = Post.joins(:user).select("posts.*, user.name as user_name")

我的问题是:当我在joins 中使用select 时,我们可以称之为eager loading 吗?

如果是的话,是

posts = Post.joins(:user).select("posts.*, user.*")

相当于? :

posts = Post.includes(:user)

【问题讨论】:

  • 请问您提问的目的是什么?可能有助于为您创建一个好的答案:)
  • @RichPeck 我添加了一些例子来更清楚:)
  • 感谢更新示例!老实说,我不太确定这两种查询类型的机制,但我添加了对 RailsCast 的引用,它演示了它们如何为您工作
  • 我问是因为我想在原始查询之上加载一些数据,最后我在关联上使用了一个选择查询,我认为您可能也需要它

标签: ruby-on-rails activerecord


【解决方案1】:

您不是从这篇博文中举了一个例子,它非常清楚地解释了joinsincludes 之间的区别和相似之处吗?如果没有,那就太巧合了。

http://nlingutla.com/blog/2013/04/21/includes-vs-joins-in-rails/

【讨论】:

  • 是的,我已经读过了,但我仍然无法理解 joins 方法 :)
  • 只需要知道 Post.joins(:user).select("posts.*, user.*") 是否等同于 Post.includes(:user)
最近更新 更多