我有一个模型A
为:
class A < ActiveRecord::Base
belongs_to :bp, class_name: "B", foreign_key: :bp_id
belongs_to :cp, class_name: "B", foreign_key: :cp_id
end
我有一个查询,我试图从模型B
中获取模型A
的所有关联的大小。
通过bp
然后cp
获取所有关联的计数,然后将两者加起来,使之有效。
total_count = bp_size + cp_size
是否可以在单个查询中从B model
获得与A
的所有关联之和?
我的确切查询如下:
bp_size = E.where(f_id: g.joins(:f)).joins(bp: :s).size
cp_size = E.where(f_id: g.joins(:f)).joins(cp: :s).size
上面的查询经过多个关联级别,但是随后我通过bp
和cp
加入了它以获得适当的大小。我想避免两次运行该查询
答案 0 :(得分:1)
我对AR所谓的“助手”一无所知,但这是完全可行的:
query = <<-SQL
SELECT
(SELECT COUNT(*) FROM a LEFT JOIN b ON (a.bp_id = b.id)) +
(SELECT COUNT(*) FROM a LEFT JOIN b ON (a.cp_id = b.id))
SQL
A.connection.execute(query).to_a.first.first
答案 1 :(得分:0)
动态解决方案
:load <path>
尽管如此,仍无法找到避免对每个关联进行查询的好方法。