【问题标题】:Difference between joins, includes and associations连接、包含和关联之间的区别
【发布时间】:2011-11-25 09:28:08
【问题描述】:

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

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

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

真的很想解决这个问题。

【问题讨论】:

    标签: ruby-on-rails-3 activerecord


    【解决方案1】:

    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)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 2016-09-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多