计算跨类的所有子对象

时间:2016-11-08 01:02:24

标签: ruby-on-rails ruby

如果模型Parent有两个子模型:AChildBChild,那么:

@parent.a_childs.count = 1
@parent.b_childs.count = 2

是否存在以下方法:

@parent.count_all_children = 3

1 个答案:

答案 0 :(得分:0)

假设Parent模型has_many关联AChildBChild,这是适用于任意数量子模型的解决方案。将以下方法放入父模型文件中:

def count_all_children
  counts = []
  Parent.reflect_on_all_associations(:has_many).each do |assoc|
    counts << self.public_send(assoc.name).count
  end
  counts.sum
end

使用反射并且可能相对较慢。如果您拥有这两个子模型并且不打算再添加(m),那么只需加上两个:

def count_all_children
  self.a_childs.count + self.b_childs.count
end