2016-11-08 42 views
1

如果Parent有两个子模型的模型:AChildBChild这样的:计数所有子跨类对象

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

有一个现有的方法使得:

@parent.count_all_children = 3 
+0

是孩子多态? – Antonio

+0

你是指什么意思? – james

+0

你可以在'Parent'类中添加一个方法 –

回答

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