2010-12-16 5 views
1

Я использую Rails 3.ActiveRecord Группировка/Количество запросов Помощь Необходим

Предположим, у меня есть следующие архетипические модели: Блог, Оставлять комментарии Категория. Блог has_many posts, Post has_many comments и принадлежит к категории.

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

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

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

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

Если я:

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

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

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

ответ

0

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

+0

Спасибо за предложение. Я думаю, что поеду с этим вариантом, но мне все же будет интересно узнать, есть ли какая-то комбинация методов AR, которые могут это сделать. – 2010-12-17 05:09:27

1

Дает «попробовать». Просто взломан это вместе быстро ....

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

(После смены «join» на «join», чтобы его можно было скомпилировать). Это возвращает идентификатор Post и идентификатор категории для одного сообщения из каждой категории. – 2010-12-17 04:58:52

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