2016-02-22 41 views
0

我查了其他S.O問題,但我不太明白如何解決問題。Active Record&Rails:錯誤:對於SELECT DISTINCT,ORDER BY表達式必須出現在選擇列表中

預告片belongs_to電影和電影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 

我怎麼能顯示每個片長只有一次?

+0

你嘗試採取從像Trailer.released.top_rated.first集合的第一個? –

回答

0

嘿,如果你已經使用mysql然後再嘗試這種方式增加一個範圍,想

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

而且儘量選擇這種方式

Trailer.released.top_rated.uniq_trailers 
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) } 
相關問題