Verwenden eines Dauerfelds in einem Rails-Modell
Ich bin auf der Suche nach der beste Weg, um ein Feld für die Dauer in der ein-Schienen-Modell. Ich möchte, dass das format HH:MM:SS (z.B.: 01:30:23). Die Datenbank ist sqlite lokal und Postgres in der Produktion.
Ich würde auch gerne arbeiten, die mit diesem Feld, so kann ich werfen Sie einen Blick auf all die Objekte in das Feld und kommen mit der Summe der Zeit aller Objekte im Modell und am Ende mit etwas wie:
30 Datensätze von insgesamt 45 Stunden, 25 Minuten und 34 Sekunden.
Also was würde am besten funktionieren?
- Feld-Typ für die migration
- Formularfeld für die CRUD-Formularen (Stunde, minute, Sekunde, drop-downs?)
- Wenigsten teure Methode zu erzeugen, wird die Gesamtdauer aller Aufzeichnungen im Modell
InformationsquelleAutor der Frage mwilliams | 2009-06-26
Du musst angemeldet sein, um einen Kommentar abzugeben.
SUM
Abfrage über die Spalte "Dauer" zu produzieren, eine Gesamtsumme. Wenn Sie zahlen, das ist einfach und schnell.Zusätzlich:
ActiveSupport::Duration
mithilfe123.seconds
(ersetzen123
mit integer aus der Datenbank). Verwendeninspect
auf die daraus resultierendenDuration
für die schöne Formatierung. (Es ist nicht perfekt. Möchten Sie vielleicht schreiben Sie selbst etwas.)ActiveSupport::Duration
Objekte, sondern als ganze zahlen. Definieren Sie einfachduration=(new_duration)
undduration
die intern anrufenread_attribute
/write_attribute
mit integer-Argumente.InformationsquelleAutor der Antwort molf
In Schienen 5, die Sie verwenden können, ActiveRecord::Attribute, die zum speichern ActiveSupport::Dauer wie nach ISO8601-strings. Der Vorteil der Verwendung von ActiveSupport::Dauer im Laufe der ganzen zahlen ist, dass Sie Sie verwenden können für Datums - /Zeit-Berechnungen, direkt aus der box. Sie können Dinge tun, wie
Time.now + 1.month
und es ist immer richtig.Hier ist, wie:
Hinzufügen
config/initializers/duration_type.rb
Migration
Modell
Nutzung
InformationsquelleAutor der Antwort Anthony Wang
Ich versucht, mit Hilfe von ActiveSupport::Dauer, aber hatte Schwierigkeiten, den Ausgang klar zu sein.
Können Sie gerne ruby-Dauereinen unveränderlichen Typ, der darstellt, einige Zeit mit Genauigkeit in Sekunden. Es hat viele tests und eine Mongoid Modell Feldtyp.
Wollte ich auch einfach analysieren menschlichen Dauer Saiten so ging ich mit Chronische Dauer. Hier ist ein Beispiel, indem es ein Modell, dass hat eine time_spent im Sekunden Bereich.
InformationsquelleAutor der Antwort Turadg
Habe ich schrieb ein paar stub zu unterstützen und zu verwenden PostgreSQL
interval
Typ wieActiveRecord::Duration
.Sehen diesem gist (Sie können verwenden Sie es als Initialisierer in Rails 4.1): https://gist.github.com/Envek/7077bfc36b17233f60ad
Zudem habe ich geöffnet, pull-requests, um die Schienen, die es gibt:
https://github.com/rails/rails/pull/16919
InformationsquelleAutor der Antwort Envek