Расширенный подсчет и присоединение в Rails - PullRequest
5 голосов
/ 01 июня 2010

Я пытаюсь найти верхнее n количество категорий, поскольку они относятся к статьям, между ними установлена ​​связь habtm. Это SQL-код, который я хочу выполнить, но не уверен, как это сделать с ActiveRecord, кроме использования метода find_by_sql. Есть ли способ сделать это с помощью методов ActiveRecord:

SELECT 
  "categories".id, 
  "categories".name, 
  count("articles".id) as counter 
FROM "categories"
JOIN "articles_categories" 
  ON "articles_categories".category_id = "categories".id
JOIN "articles" 
  ON "articles".id = "articles_categories".article_id
GROUP BY "categories".id
ORDER BY counter DESC
LIMIT 5;

1 Ответ

9 голосов
/ 02 июня 2010

Вы можете использовать find с опциями для выполнения того же запроса:

Category.find(:all, 
  :select => '"categories".id, "categories".name, count("articles".id) as counter', 
  :joins => :articles, 
  :group => '"categories".id', 
  :order => 'counter DESC', 
  :limit => 5
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...