ActiveRecord Группировка / Счетчик Требуется Справка - PullRequest
1 голос
/ 17 декабря 2010

Я использую Rails 3.

Предположим, у меня есть следующие архетипические модели: блог, сообщение, комментарий, категория. В блоге есть сообщения о_маниях, комментарии и сообщения о категориях.

Я хочу знать, сколько сообщений в каждой категории, но я считаю только те из них, у которых есть комментарии.

Если я сделаю следующее:

blog.posts.group("category_id").count

- Это дает мне OrderedHash, который близок к тому, что мне нужно, но, конечно, проблема заключается в том, что значения подсчета включают в себя посты без комментариев.

Если я это сделаю:

blog.posts.group("category_id").joins("comments").count

- это дает мне количество комментариев, которые есть в сообщениях этой категории (это делает то же самое, если я помещаю объединение перед группировкой).

Спасибо за любую помощь.

Ответы [ 2 ]

1 голос
/ 17 декабря 2010

Даем попробовать. Просто быстро все взломали ...

Post.select("posts.id, posts.category_id, count(comments.id)").join(:comments).group('posts.category_id').having('count(comments.id) > 0')

Что бы перевести на что-то вроде ...

select posts.id, posts.category_id, count(comments.id) from posts join comments on posts.id = comments.post_id group by posts.category_id having count(comments.id) > 0

Возможно, придется немного повторить это ...

0 голосов
/ 17 декабря 2010

Простой вариант, который поможет сделать ваш запрос простым и читабельным, состоит в том, чтобы установить counter_cache в вашей ассоциации после комментариев, чтобы вы могли просто добавить where("comments_count > 0") в свою находку.

...