Rails ActiveRecord различает количество атрибутов, превышающее количество вхождений - PullRequest
4 голосов
/ 23 ноября 2010

У меня есть таблица author_comments с полями author_name, comment и идентификатором бренда.

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

Например,

author_comments

author_name      comment                 brand

joel             "loves donuts"             1

joel             "loves cookies"            1

joel             "loves oranges"            1

fred             "likes bananas"            2

fred             "likes tacos"              2

fred             "likes chips"              2

joe              "thinks this is cool"      1

sally            "goes to school"           1

sally            "is smart"                 1

sally            "plays soccer"             1

В этом случае мой запрос должен вернуть 2 для бренда 1 и 1 для бренда 2.

Я заинтересован в наиболее эффективном варианте здесь, не получая все записи из БД и не просматривая их в ruby, я могу это сделать.Я ищу лучший способ, используя активные конструкции записей или sql.

Обновление: вот SQL:

SELECT author_name, COUNT(*) AS author_comments
FROM fan_comments
WHERE brand_id =269998788
GROUP BY author_name
HAVING author_comments > 2;

Должен ли я просто сделать find_by_sql?

Ответы [ 2 ]

3 голосов
/ 12 июня 2011

Вы можете определить тот же запрос, используя конструкции активной записи:

FanComments.all(
  :select => 'author_name, count(*) as author_comments', 
  :group => 'author_name', 
  :having => 'author_comments > 2') # in rails 2

или

FanComments.
  select('author_name, count(*) as author_comments').
  group('author_name').
  having('author_comments > 2') # in rails 3
1 голос
/ 28 апреля 2015
FanComment.group(:author_name).count
...