铁路 - 根据孩子的条件返回父母,同时急切地装载孩子

时间:2018-04-04 20:25:20

标签: ruby-on-rails

class Foo
  has_many :bars
end

class Bar
  belongs_to: foo
end

这是一个可以解决问题的任意例子。

假设任何给定的Bar都有一个属性:age。我正在寻找一个ActiveRecord查询,该查询仅返回 foos bars age为7(且不<{1}} bars与那个条件不匹配的情况下,bars急切加载。

我将如何做到这一点?

1 个答案:

答案 0 :(得分:0)

有几种方法可以解决这个问题,但我认为最常见的是:

foos = Foo.includes(:bars).references(:bars).where("bars.age=7")

您也可以执行以下操作来消除连接(对于某些数据集,这可能会更快):

foos = Foo.includes(:bars).where("exists (select * from bars where foo_id=foos.id and age=7)")