Ich verwende chartkick
, um Diagramme in meiner Rails App zu rendern. Und ich möchte groupdate
verwenden, um die Daten für die letzten 7 Tage abzufragen, die 0 erhalten, wenn ein Tag nicht anwesend ist.Wie gruppiert man nach Tag und addiert eine berechnete Eigenschaft mit GroupDate?
Ich weiß, dass ich es so verwenden kann:
project.time_entries.group_by_day(:created_at, last: 7, format: "%a\n%d %b").count
Allerdings habe ich nicht die Anzahl der Datensätze gefunden erhalten will, ich will, anstatt die Summe aus einem berechneten Feld bekommen:
class TimeEntry < ActiveRecord::Base
def duration_sec
(self.time.end - self.time.begin).to_i
end
end
so, wenn es gab 4 Aufzeichnungen am 25. März statt sich:
{"20 Mar"=>0, "21 Mar"=>0, "22 Mar"=>0, "23 Mar"=>0, "24 Mar"=>0, "25 Mar"=>4, "26 Mar"=>0}
ich möchte die Gesamtsumme von 01 erhaltenfür diesen Tag. Deshalb mag ich so etwas wie dies mit DateGroup
erreichen:
project.time_entries.group_by{ |a| a.created_at.to_date.to_s }.map { |k, v| { k => v.sum(&:duration_sec) } }
Ich habe auch versucht, so etwas wie diese:
project.time_entries.group_by_day(:created_at, last: 7, format: "%a\n%d %b").sum(&:duration_sec)
aber ich erhalte einen Fehler Argument Ausnahme.
Zeit ist ein tsrange von postgresql, ich denke, das ist, warum dies nicht funktioniert für mich, wissen Sie, wie Sie die 'beginnen' und 'Ende' Werte aus einem Bereich eingeben Postgres? –
Ok, ich benutze 'Upper (Zeit) - Lower (Zeit)' und es scheint zu funktionieren. Das Format des Wertes ist jedoch ein String wie 'hh: mm: ss' und ich benötige ihn tatsächlich in float-Werten –