在Rails中获取与模型的所有关联的计数

时间:2018-08-15 15:03:57

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个模型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

上面的查询经过多个关联级别,但是随后我通过bpcp加入了它以获得适当的大小。我想避免两次运行该查询

2 个答案:

答案 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>

尽管如此,仍无法找到避免对每个关联进行查询的好方法。