2013-08-29 4 views
2

У меня есть список ответов:Вложенные группы запросов в Rails

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> 

Как вы можете видеть, каждый ответ принадлежит вопрос, выбор, пользователь и клуб. Я пытаюсь создать вложенный запрос группы для создания хэш:

{ 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 } 

Есть ли все, чтобы сделать то, что я требуется в одном запросе, или мне придется объединить/перезаписать этот хеш? Если да, то как я могу это сделать?

+0

У вас есть запрос. Что вам нужно сделать, так это реструктурировать его. – tadman

+0

Спасибо tadman. Любая идея, как я могу реструктурировать это на {4 {21 => 7,22 => 4}, 11 {21 => 2,22 => 7}}? –

ответ

5

Как сказал @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 
+0

Отлично, спасибо –

+0

отлично ... Спасибо – abhijit

Смежные вопросы