0

我有一个在 rails 中具有父子关联的模型,并且想计算特定子项属于父项的次数。如果例如:Parent1.children = [A,B,C] 和 Parent2.children = [B,D],我想获取每个子记录的计数 [A => 1, B => 2, C = > 1,D => 1]。应该如何构建查询?

4

2 回答 2

1

这是一种简单的方法,但从 SQL 查询的角度来看可能不是最有效的:

child_counts = Parent.each_with_object(Hash.new(0)) { |p, counts| p.children.each { |c| counts[c.id] += 1 } }

生成的哈希child_counts给出每个子 id 的计数(子 id 是哈希键)。

于 2013-08-30T20:14:42.483 回答
1

这将为您提供一个散列,其中每个键是孩子的 id,每个值是其父母的计数:

Children.joins(:parents).group('childrens.id').count

这将为您提供一个孩子的数组,其中每个孩子都已使用 attr 进行了初始化,parents_count因此您可以child => parents_count使用它构建一个哈希 ( ):

childrens_with_count = Children.joins(:parents).group('childrens.id').select('childrens.*, COUNT(*) AS parents_count')
childrens_with_count.map { |child| { child => child.parents_count } }
#=> [#<Child id=1 ...> => 2, #<Child id=2...> => 10 ... ]
于 2013-08-30T20:18:41.673 回答