Как найти темы с наибольшим количеством флагов - PullRequest
0 голосов
/ 25 июля 2010

Допустим, у меня есть модель под названием Тема. Topic has_many :topic_flags (TopicFlag используется для обозначения содержимого, помеченного как неподходящее). У меня такой вопрос: как я могу выбрать темы с наибольшим количеством флагов (ограничено произвольно, по убыванию)? Некоторое время я думал об этом, и хотя я могу взломать SQL-запрос, я бы предпочел найти более подходящий Rails способ сделать это.

1 Ответ

1 голос
/ 25 июля 2010
class Topic < ActiveRecord::Base
  has_many :topic_flags

  named_scope :most_flags, lambda {|min_flags| {:joins => :topic_flags, 
                                                :group => "topic_flags.topic_id", 
                                                :order => "count(topic_flags.topic_id) desc", 
                                                :having => ["count(topic_flags.topic_id) >= ?", min_flags] }}
end

При этом используется внутреннее объединение, поэтому он не выбирает темы с нулевыми флагами.Вы бы назвали это так.

Topic.most_flags(3)  # returns a sorted list of all topics with at least 3 flags.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...