2016-06-30 61 views
0

我有一个推荐模型,我想选择所有不同的按照它们的movie_id列的建议。我已经试过了还没有工作的一些方法,但没有:Rails:选择特定列唯一的所有记录

scope :not_duplicate, -> { 
    group_by(&:movie_id) 
    } 

==> doesn't work on a class 

scope :not_duplicate, -> { 
     uniq_by(&:movie_id) 
     } 

==> doesn't work on a class 

scope :not_duplicate, -> { 
     select(:movie_id).group(:movie_id, "recommendations.id") 
     } 

==> only returns movie_id values and I need entire record 

scope :not_duplicate, -> { 
     select("recommendations.*").group(:movie_id) 
     } 

==> PG::GroupingError: ERROR: column "recommendations.id" must appear in the GROUP BY clause or be used in an aggregate function 

我敢肯定,这是一个很经常发生,但由于某种原因,我无法找到解决方案。有任何想法吗?

+0

你需要弄清楚你要寻找的更多。你只想要每部电影的第一个建议?如果是,请尝试'Recommendation.joins(“JOIN(SELECT MIN(id)as first_id FROM recommendations GROUP BY movie_id)t ON t.first_id = recommendations.id”)'。 –

回答

0

如果我正确理解你的问题,你可以试试这个

Recommendation.select {|rec| rec.movie_id == movie_id).uniq 
+0

我相信你不想这样做,效率明智! – oreoluwa

0

如何:

scope :not_duplicate, -> { 
     group(:id, :movie_id).distinct 
     }