1

我有以下型号:

User < ActiveRecord::Base
  belongs_to :person
end

Person < ActiveRecord::Base
  has_one :user
end

如果我希望在加载用户时加载用户,我会这样做:

User.includes(:person)

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

如果我这样做User.join(:person),它将加入:person但没有选择语句并作为:user.

我怎样才能做到这一点?

4

1 回答 1

0

我发现使用:

User.includes(:person)

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

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

我从未停止对 Rails 感到惊讶^^

于 2011-10-15T12:42:48.153 回答