连接、包含和关联之间的区别



我刚开始使用rails。到目前为止,我很喜欢它,但有些东西我还没有掌握。

其中一个是joins/includes与关联的交互作用。对于每个模型,您定义其与其他模型的关系(has_many, belongs_to等)。这足以让它们通过主键连接并找到彼此,对吧?

那么使用joins/includes有什么意义呢?我自己的猜测是减少sql查询,只获取必要的对象,但我想明确这一点。它的关联是连接,就像范围是order/where等。是一种可以修改的默认行为吗?

我真想把这件事弄清楚

Railscast #181 By Ryan Bates讲得很好。

有效地使用join来连接数据库服务器上的两个表。但是,默认情况下,数据集中只包含第一个表中的列。您将使用join根据第二个表中的标准测试第一个表中的记录。

include类似于join,但是在第二个表的行上进行有效的数据检索,查找相关的记录,并用这些记录填充Rails ActiveRecord缓存。

因此,如果您有一个User类和一个Role类,其中User可以有一个附加到它的Role,那么用户和角色实例将同时从数据库中检索。

用户# 5 =>指向=>角色# 7

用户# 10 # = =>>点作用12

使用includes()从user表中检索用户#5和#10,还将使用SQL查询实例化角色#7和#12,如:

SELECT roles.* FROM roles WHERE id IN (7,12)

最新更新