Bearbeiten 2. 5.9.20
Wenn Sie Ruby 2.6 verwenden, können Sie dies mit endlosen Bereichen tun und in Ruby 2.7 können Sie Bereiche ohne Anfang verwenden.
Beispiel:
# Ruby >= 2.6
User.where(last_deposit: 10.days.ago..)
erzeugt
SELECT "users".* FROM "users" WHERE "user"."last_deposit" >= '2020-04-29 21:58:39.109419'"
und
# Ruby >= 2.7
User.where(last_deposit: ..10.days.ago)
erzeugt
SELECT "users".* FROM "users" WHERE "users"."last_deposit" <= '2020-04-29 22:01:05.582055'
Bearbeiten
Dies ist jetzt in Rails 5 möglich!
User.where(last_deposit: 10.days.ago..DateTime::Infinity.new)
generiert die SQL
SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= '2018-06-30 17:08:54.130085').
Original (und Rails <5) Antwort
Es sieht nicht so aus, als gäbe es eine Möglichkeit, grundlegende where
zu verwenden Hash-Syntax zum Generieren einer Größer-als-oder-kleiner-als-Abfrage für Zeitstempel. Der einfachste und lesbarste Weg ist in meiner Frage unter Current Simple Solution
beschrieben .
Eine andere Möglichkeit, dies zu tun, verwendet ARel, aber Sie müssen einige weniger häufig gesehene Anrufe tätigen. Zuerst können Sie ein Handle auf die ARel-Tabelle der AR-Klasse abrufen, auf die Spalte zugreifen und das Ergebnis von „größer als“ gt
übergeben , größer oder gleich gteq
, kleiner als lt
, und/oder kleiner oder gleich lteq
Methode mit einem Argument zu where
.
In der obigen Situation würde dies wie folgt erfolgen:
last_deposit_column = User.arel_table[:last_deposit]
last_deposit_over_ten_days_ago = last_deposit_column.gteq(10.days.ago)
User.where(last_deposit_over_ten_days_ago)