3

回答のリストがあります:

 Answer.last
 Answer Load (0.8ms)  SELECT "answers".* FROM "answers" ORDER BY "answers"."id" DESC LIMIT 1
 => #<Answer id: 235, question_id: 15, choice_id: 23, user_id: 3, created_at: "2013-08-28 23:51:24", updated_at: "2013-08-28 23:51:24", club_id: 11> 

ご覧のとおり、各 Answer は質問、選択肢、ユーザー、およびクラブに属しています。次のハッシュを生成するために、ネストされたグループ クエリを作成しようとしています。

 { club_id { choice_id => answers_count, choice_id => answers_count}, etc, etc }

私がこれまでに持っているもの:

 Answer.where(:question_id => 14).group(:club_id, :choice_id).count

生成するもの:

{[4, 21]=>7, [11, 21]=>2, [4, 22]=>4, [11, 22]=>7}

これは:

{ [club_id, choice_id] => answers_count, etc, etc }

1 つのクエリで必要なことを行う方法はありますか、それともこのハッシュをマージ/再ジグする必要がありますか? もしそうなら、どうすればこれを行うことができますか?

4

1 に答える 1

10

@tadman が言うように、表示されている結果は、クエリで得られるすべてのものです。カスタム形式が必要な場合は、アルゴリズムを実行する必要があります。このようなものがうまくいくはずです:

result = Answer.where(:question_id => 14).group(:club_id, :choice_id).count

better_result = result.each_with_object({}) do |((club_id, choice_id), answers_count), m|
  m[club_id] ||= {}
  m[club_id][choice_id] = answers_count
end
于 2013-08-29T20:35:10.547 に答える