【发布时间】:2016-05-18 07:15:23
【问题描述】:
http://www.trailerpuppy.com/trailers/popular
预告片属于电影。电影 has_many 预告片和 has_many 通知。我想返回通知最多的电影的最新预告片
预告片.rb
def self.most_reminders_set(from_date, until_date, number_to_return)
Trailer.joins(:movie => :notifications).
where("movies.release_date > ?", from_date).
where("movies.release_date < ?", until_date).
select('trailers.*, COUNT(notifications.id) AS notifications_count').
joins(:movie).group('trailers.id').
order('notifications_count DESC').take(number_to_return).first(number_to_return)
end
所以基本上这个方法允许我设置一个时间范围,然后它会返回前 X 个预告片(谁的电影有最多的通知)。
问题在于我为同一部电影获得了多个预告片。我只想为每个唯一的 movie_id 返回一个预告片。
不确定在我的查询中添加到哪里。
【问题讨论】:
-
您可以使用
where(movies: { release_date: [from_date..until_date] })稍微清理一下。您是否尝试过在movies.id上进行分组?
标签: ruby-on-rails activerecord