Моего упрощена рельсы приложения выглядит следующим образомрельсы 3.1 сложного find_by_sql запроса на вложенной has_many через модель
# chapter.rb
has_many :sections
has_many :videos, through: :sections
# section.rb
belongs_to :chapter
has_many :videos
# video.rb
belongs_to :section
has_many :votes
# vote.rb
belongs_to :video
То, что я хочу сделать, это найти топ-5 в настоящее время популярных видео для данной главы, что будет означать заказывая видео по количеству голосов, полученных в течение последнего месяца (и, очевидно, ограничивает 5 результатов).
Я хотел написать метод popular_videos
в моей модели главы, и я думаю, для этого требуется запрос find_by_sql
, верно? Но я не знаю достаточно sql, чтобы написать этот запрос.
Таблица голосов имеет столбец created_at
, и я использую postgres для своей базы данных. Любая помощь приветствуется.
Спасибо за ответ, но мне также нужен запрос опускать голоса, которые старше одного месяца из подсчета голосов –
Угадывая (снова) в фактической структуре таблицы, я добавил строку, чтобы ограничить голоса за последний месяц , – kgrittn
отлично поработал! Спасибо. У меня есть еще один вопрос. Я использую postgre 9.0, и я хочу выбрать все столбцы из таблицы видео, а не только имя и идентификатор, поэтому я изменил первую строку на 'SELECT *, count (*) как vote_count', но затем он продолжал давать мне ошибки в строке GROUP BY. Нужно ли добавлять каждый столбец из таблицы видео в эту строку или есть лучший способ сделать это? –