积极记录& Rails:错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中

时间:2016-02-22 03:32:27

标签: ruby-on-rails activerecord

我查了其他S.O问题,但我不太清楚如何解决这个问题。

预告片归属于电影和电影has_many发布。我在预告片上的范围:

:发布范围的目的是让电影至少有一个版本并且最近超过25年的预告片:

scope :released, -> { 
    joins(movie: :releases).where("movies.release_date > ?", 25.years.ago)
  }

然后我有另一个范围,通过他们的父电影imdb_rating来命令预告片:

 scope :top_rated, ->  {
        where("movies.imdb_rating IS NOT NULL").order("movies.imdb_rating desc")

现在如果我调用Trailer.released.top_rated,问题是如果它的电影有多个版本,同一个预告片会多次出现。我尝试在几乎每个我能想到的地方添加uniq,但我只是得到错误:

 ERROR:  for SELECT DISTINCT, ORDER BY expressions must appear in select list

如何只显示每个预告片一次?

2 个答案:

答案 0 :(得分:0)

嘿,如果您使用过mysql,那么请尝试这样添加一个范围,如

scope :uniq_trailers, ->  {
        group("releases.movie_id") 
}

并尝试选择这种方式

 Trailer.released.top_rated.uniq_trailers

答案 1 :(得分:0)

您可以稍微修改范围:

<强>电影

scope :released, -> { where("release_date > ?", 25.years.ago) }

scope :top_rated, -> { where.not(imdb_rating: nil).order(imdb_rating: :desc) }

<强>拖车

scope :released_top_related, -> { joins(:movie).merge(Movie.released.top_related) }