如何强制ActiveRecord通过JOIN而不是2个查询加载belongs_to-has_one关系?

时间:2011-10-14 13:06:39

标签: activerecord join include belongs-to has-one

我有以下型号:

User < ActiveRecord::Base
  belongs_to :person
end

Person < ActiveRecord::Base
  has_one :user
end

如果我希望User在加载时加载Person,我会这样做:

User.includes(:person)

问题是在belongs_to-has_many关系中使用2个查询,这很好,但在这种情况下,我认为最好使用JOIN并只使用一个查询。

如果我User.join(:person),它将加入:person,但不会加入选择的陈述和:user的属性。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

我发现使用:

User.includes(:person)

执行2个查询...但是,如果您需要在查询中使用:person列,ActiveRecord会自动检测它并在单个查询中使用连接转换2个查询

User.includes(:person).where('person.name=?', 'something')

我永远不会被Rails惊呆了^^