Modifier 2 09/05/2020
Si vous utilisez Ruby 2.6, vous pouvez le faire avec des plages infinies et dans Ruby 2.7, vous pouvez utiliser des plages sans début.
Ex. :
# Ruby >= 2.6
User.where(last_deposit: 10.days.ago..)
génère
SELECT "users".* FROM "users" WHERE "user"."last_deposit" >= '2020-04-29 21:58:39.109419'"
et
# Ruby >= 2.7
User.where(last_deposit: ..10.days.ago)
génère
SELECT "users".* FROM "users" WHERE "users"."last_deposit" <= '2020-04-29 22:01:05.582055'
Modifier
C'est désormais possible dans Rails 5 !
User.where(last_deposit: 10.days.ago..DateTime::Infinity.new)
va générer le SQL
SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= '2018-06-30 17:08:54.130085').
Réponse originale (et Rails <5)
Il ne semble pas qu'il existe un moyen d'utiliser where
de base syntaxe de hachage pour générer une requête supérieure ou inférieure à pour les horodatages. La manière la plus simple et la plus lisible est décrite dans ma question sous Current Simple Solution
.
Une autre façon de le faire utilise ARel, mais vous devez effectuer des appels moins courants. Vous pouvez d'abord obtenir un handle vers la table ARel de la classe AR, accéder à la colonne, transmettre le résultat supérieur à gt
, supérieur ou égal à gteq
, moins de lt
, et/ou inférieur ou égal à lteq
méthode avec un argument pour where
.
Dans la situation ci-dessus, cela se ferait comme :
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)