Почти всегда вы должны использовать SQL для фильтрации вашего набора результатов.База данных намного более настроена на производительность, и сортировка в коде часто может привести к N + x запросам, которые могут снизить производительность.
Средство поиска, которое может выполнить что-то вроде того, что вам нужно, может выглядеть так:*
Article.where('id in (
SELECT article_id
FROM comments
WHERE approved = ? AND public = ?
ORDER BY count(article_id) DESC
LIMIT 10
)', true, true)