2016-06-30 6 views
0

Ich habe ein Empfehlungsmodell und ich möchte alle Empfehlungen auswählen, die durch ihre Movie_id Spalte unterschieden werden. Ich habe ein paar Methoden ausprobiert, aber keine, die noch gearbeitet haben:Rails: Alle Datensätze auswählen, die durch eine bestimmte Spalte eindeutig sind

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 

Ich bin sicher, dass dies ein ziemlich regelmäßiges Vorkommen ist aber aus irgendeinem Grund kann ich nicht die Lösung finden. Irgendwelche Ideen?

+0

Sie müssen klären, was Sie für mehr suchen. Willst du nur die erste Empfehlung pro Film? Wenn dies der Fall ist, versuchen Sie "Recommendation.joins (" JOIN (SELECT MIN (id) as first_id VON den Empfehlungen GROUP BY movie_id) t ON t.first_id = recommendations.id ")'. –

Antwort

0

Wenn ich Ihre Frage richtig verstehen könnten Sie versuchen, diese

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

Ich bin mir sicher, dass Sie das nicht effzient machen wollen! – oreoluwa

0

Wie wäre:

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