Rails-3-DateTime-Vergleich w/ Datum In Einer ActiveRecord-Abfrage
Ich versuche, die Suche nach einem Modell für alle Termine gleich zu einem bestimmten Zeitpunkt, während das weglassen der Zeitangabe. In Rails konnte ich führen Sie einfach dies als DateTime.to_date == somedate
aber ich glaube es ist nicht ganz so leicht zu formulieren, in SQL where-ich wäre nicht in der Lage die to_date Methode, um eine ganze Spalte wie created_at:
Foo.where("created_at == some_day_without_time_stamp").count
Anfangs dachte ich, denn ich war mit einer postgresql-Datenbank konnte ich einfach verwenden Sie psql-syntax, aber ich viel, viel lieber lassen Sie es zu ActiveRecord, zu entscheiden, was sql ist, die meisten anwendbar, und halten meinen code agnostisch, Datenbank-Anbieter. Ist dies möglich, ohne zusätzliche plugins oder Edelsteine?
- Können Sie tun, created_at >= some_day_with_00:00:00 timestamp und create_at < some_day_plus_one_with_00:00:00 timestamp?
- Offenbar kann ich, danke für die Hilfe. Wenn Sie die post, als Antwort werde ich es akzeptieren.
- Du bist herzlich willkommen - Antwort Hinzugefügt unten
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen
created_at >= some_day_with_00:00:00 timestamp and create_at < some_day_plus_one_with_00:00:00 timestamp
Ich würde so etwas tun...
Diese erfassen würde alle
created_at
Termine zwischen Mitternachtsomeday
undsomeday + 1
. Dieser ist inklusive (so es ein Foo erstellt bang auf Mitternacht auf die +1 Tag), kann aber 'gut genug' für Ihre Bedürfnisse, ohne messing mit Zeitstempel.Für Nettigkeit, ich würde es einpacken als
scope
So
ist gut lesbar.
where( :created_at => (someday)..(someday + 23.hours + 59.minutes + 59.seconds) )
DateTime-Klasse haben zwei nützliche Methoden, dies zu tun:
beginning_of_day
undend_of_day
.Für diesen Fall, in dem Sie haben ein Date-Objekt, die Sie machen könnten:
Bemerken, dass Sie verwandeln das Date-Objekt einen DateTime-Objekt
Umfang:
Mit: