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

时间:2011-11-25 09:28:08

标签: ruby-on-rails-3 activerecord

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

其中之一是joins/includes与关联之间的互动。对于每个模型,您可以将其关系(has_manybelongs_to等)定义为其他模型。这足以让他们通过主键连接并找到对方,对吗?

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

真的想要理顺这一点。

1 个答案:

答案 0 :(得分:0)

Railscast #181 By Ryan Bates非常清楚。

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

include类似于连接,但是对于任何相关记录,在第二个表的行上进行有效的数据检索,并使用这些记录填充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)