0

Rails で親子関係を持つモデルがあり、特定の子が親に属する回数を数えたいと考えています。たとえば、Parent1.children = [A,B,C] および Parent2.children = [B,D] の場合、各子レコードの数を取得したい [A => 1、B => 2、C = > 1、D => 1]。クエリをどのように作成する必要がありますか?

4

2 に答える 2

1

これにより、各キーが子の ID であり、各値がその親の数であるハッシュが得られます。

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

これにより、各子が属性で初期化された子の配列が得られる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 に答える
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 に答える