"includes“和"joins”在ActiveRecord查询中有什么区别?谁能给我解释一下下面两个相关的模型?
class Car < ActiveRecord::Base
belongs_to :store
end
class Store < ActiveRecord::Base
belongs_to :owner
has_one :car
end
发布于 2011-02-01 18:38:17
:joins
在sql中将表连接在一起,:includes
eager加载关联以避免n+1问题(执行一个查询来检索记录,然后为每个加载的关联执行一个查询)。
我建议你阅读他们在Rails Guides中的部分,以获得更多信息。
发布于 2013-09-27 20:06:49
stores = Store.joins(:car)
这将返回所有有汽车的商店。stores[0].car
将导致另一个查询。
stores = Store.includes(:car)
这将返回所有商店,无论是否有车。stores[0].car
不会导致另一个查询。
stores = Store.includes(:car).joins(:car)
这将返回具有汽车的所有商店。stores[0].car
不会导致另一个查询。我不建议将其用于has_many
关系,但它对has_one
非常有效。
发布于 2012-06-19 18:40:52
:joins返回只读对象,:includes不返回
:joins使用内部联接,:includes使用外部联接。
includes的主要原因是急切加载,以避免使用单独的查询加载每个对象的属性的N+1问题。
https://stackoverflow.com/questions/4861416
复制相似问题