2017-11-27 3 views
0

Ich habe eine Tabelle: Verschiebungen mit Spalte: Datum und gehört zu: Benutzer, ich möchte alle Schichten eines Benutzers anzeigen können, aber wenn 2 Schichten dasselbe haben: Datumsspalte, ich möchte nur eine angezeigt werden (die zuletzt eine erstellt)Zeige nur ein Objekt mit einer bestimmten Spalte, Rails

ich versucht habe:

@shifts = Shift.where(user: user).order(:date).group(:date).take(1) 
@shifts = Shift.where(user: user).order(:date).group_by { |t| t.date }.take(1) 

Weder arbeitete von ihnen, auch, wie würde ich dies tun, wenn ich wo Verschiebungen von mehreren anzuzeigen Benutzer, in denen ich nur die eine Schicht pro Tag jedes Benutzers anzeigen möchte? Ich bin mit Postgres

+0

Warum das nicht funktioniert ?, 'selbst Group' sollten Sie die aktuellste Datensatz geben, indem verwendet für das Attribut zu gruppieren. –

+0

ActiveRecord :: StatementInvalid: PG :: GroupingError: FEHLER: Spalte "shifts.id" muss in der GROUP BY-Klausel erscheinen oder in einer Aggregatfunktion verwendet werden, der Fehler –

+0

Sie müssen die Modell-ID hinzufügen, wenn Sie 'group' verwenden , versuche 'Shift.where (user: user) .order (: date) .group (: id,: date)', was bekommst du? –

Antwort

0
Shift.where(user: user).select(:date).order(:date).group(:date) 

ODER

user.shifts.select(:date).order(:date).group(:date) 
+0

das Endergebnis kann nicht mit einer gezeigt werden. Wie mache ich das? –

Verwandte Themen