2016-07-27 13 views
3

Ich habe ein Modell mit einem time Attribut. Es ist Konfiguration für wann ein Benutzer eine E-Mail erhalten möchte, d. H. 5 PM EST. Es ist in der Datenbank als 21:00:00 gespeichert. Ich würde es gerne nach Entfernung abfragen. Zum Beispiel möchte ich, dass jeder Benutzer eine Erinnerungszeit zwischen 20:55:00 und 21:05:05 hat.Rails: Wie Abfrage Zeitbereich, nicht Datum, Werte für ein Modell in ActiveRecord

Rails scheint Zeitattribute irgendwie seltsam zu behandeln, weil es als eine vollständige DateTime angezeigt werden soll, so hat die Datenbank 21:00:00, aber wenn in Schienen geladen wird, zeigt es 2000-01-01 17:00:00.

jetzt Ihr Code wie folgt aussieht:

scope :receives_report_reminder_at, -> (time) do 
    start = (time - 5.minutes).strftime('%T') 
    ending = (time + 5.minutes).strftime('%T') 

    where(notification_report_reminder_time: start...ending) 
end 

Diese in meinem Testfällen funktioniert, aber funktioniert nicht, wenn ich es außerhalb der Tests versuchen. Gedanken? Gibt es einen richtigen Weg, um ein Szenario zu bewältigen, oder gehe ich falsch vor?

Antwort

3

Ich sehe nach Tags, die Sie angegeben haben, dass Sie PostgreSQL-Datenbank verwenden. Sie können einen Datenbankmechanismus verwenden, um die DateTime-Spalte in den time-Typ zu konvertieren.

, die mit einem doppelten Doppelpunkt-Operator (::) durchgeführt werden kann:

where('notification_report_reminder_time::time >= ? and notification_report_reminder_time <= ?', start, ending) 
+0

So einfach ist das! Ich hatte gerade angefangen, mich mit den Transformationen herumzuschlagen. – mattmcmanus

Verwandte Themen