我正在寻找优化代码中完成的查询数量的方法。
假设我有这个关联链:
A belongs to B
B belongs to C
C belongs to D
假设我有一个A对象,我想得到一个出现在D上的字段。 如何在不进行3次查询的情况下进行此操作(天真的方法):
a.b.c.d.value
为了澄清,我已经掌握了A的对象。 (这是上面代码中的 a )
答案 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