首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ActiveRecord查询中的"includes“和"joins”有什么区别?

ActiveRecord查询中的"includes“和"joins”有什么区别?
EN

Stack Overflow用户
提问于 2011-02-01 18:27:49
回答 7查看 14.2K关注 0票数 25

"includes“和"joins”在ActiveRecord查询中有什么区别?谁能给我解释一下下面两个相关的模型?

代码语言:javascript
复制
class Car < ActiveRecord::Base
  belongs_to :store
end

class Store < ActiveRecord::Base
  belongs_to :owner
  has_one :car
end
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2011-02-01 18:38:17

:joins在sql中将表连接在一起,:includes eager加载关联以避免n+1问题(执行一个查询来检索记录,然后为每个加载的关联执行一个查询)。

我建议你阅读他们在Rails Guides中的部分,以获得更多信息。

票数 27
EN

Stack Overflow用户

发布于 2013-09-27 20:06:49

代码语言:javascript
复制
stores = Store.joins(:car)

这将返回所有有汽车的商店。stores[0].car将导致另一个查询。

代码语言:javascript
复制
stores = Store.includes(:car)

这将返回所有商店,无论是否有车。stores[0].car不会导致另一个查询。

代码语言:javascript
复制
stores = Store.includes(:car).joins(:car)

这将返回具有汽车的所有商店。stores[0].car不会导致另一个查询。我不建议将其用于has_many关系,但它对has_one非常有效。

票数 45
EN

Stack Overflow用户

发布于 2012-06-19 18:40:52

:joins返回只读对象,:includes不返回

:joins使用内部联接,:includes使用外部联接。

includes的主要原因是急切加载,以避免使用单独的查询加载每个对象的属性的N+1问题。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4861416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档