2016-06-29 6 views
3

Ich habe 2 Modelle wie folgt:Reihenfolge der Beziehung basierend auf zugeordneten Tabelle in rails4

point ist ein Feld, in Marken-Tabelle. Für jeden Schüler gibt es viele Einträge in der Noten-Tabelle.

Ich muss eine Liste der Schüler basierend auf der Reihenfolge der höchsten Gesamtpunkte erhalten.

Ich habe versucht, wie unten:

@students = Student.all.collect{|p| [p,p.marks.pluck(:point).sum]} 
@students.sort_by { |h| h[1] }.reverse! 

Aber es wird zwei Elemente in jedem Array zurück, ein das Objekt und neben den Gesamtpunkten.

Gibt es eine bessere Lösung?

Danke,

Jissy

Antwort

6

Dies sollte den Trick:

Student.joins(:marks).select('students.*, SUM(marks.point) AS total_point').group(:id).order('total_point DESC') 
+0

Eine kleine Änderung gab mir das Ergebnis: Student.joins (: marks) ('Studenten *, SUM (marks.point) AS total_point') .select. Gruppe ('students.id'). order ('total_point DESC'). Danke – jissy

+0

akzeptiere die Antwort vielleicht? – jaydel

4

Sie können es so machen.

Student.joins(:marks).select('id, sum(marks.point) as total_marks').group('students.id').order('total_marks desc') 

Wenn Sie noch nicht in der Lage sind, es laufen Sie es bitte ändern oder lassen Sie mich anstelle von id in ausgewählten know.In Sie jede Spalte auswählen können (s).

Verwandte Themen