rails activerecord - 通过单个查询获得很好的祖父币值

时间:2016-10-27 07:31:29

标签: ruby-on-rails activerecord

我正在寻找优化代码中完成的查询数量的方法。

假设我有这个关联链:

A belongs to B
B belongs to C
C belongs to D

假设我有一个A对象,我想得到一个出现在D上的字段。 如何在不进行3次查询的情况下进行此操作(天真的方法):

a.b.c.d.value

为了澄清,我已经掌握了A的对象。 (这是上面代码中的 a

3 个答案:

答案 0 :(得分:0)

在这里,您可以使用嵌套连接查询。

A.joins(B: [{C: :D}]).
     where(D.column_name => "Any Value")

答案 1 :(得分:0)

我最终建立了以下内容:

A.where("a.id = #{a.id}").joins(b: [{c: :d}]).select("d.value").pluck(:value)

答案 2 :(得分:0)

你试过了吗?

class a
  belongs_to :b
  has_one    :d, :through :b
end

class b
  belongs_to :c
  has_one    :d, :through :c
end

然后你应该可以使用a.d