Modifica 2 9/5/20
Se stai usando Ruby 2.6 puoi farlo con intervalli infiniti e in Ruby 2.7 puoi usare intervalli senza inizio.
Es.:
# Ruby >= 2.6
User.where(last_deposit: 10.days.ago..)
genera
SELECT "users".* FROM "users" WHERE "user"."last_deposit" >= '2020-04-29 21:58:39.109419'"
e
# Ruby >= 2.7
User.where(last_deposit: ..10.days.ago)
genera
SELECT "users".* FROM "users" WHERE "users"."last_deposit" <= '2020-04-29 22:01:05.582055'
Modifica
Questo è ora possibile in Rails 5!
User.where(last_deposit: 10.days.ago..DateTime::Infinity.new)
genererà l'SQL
SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= '2018-06-30 17:08:54.130085').
Risposta originale (e Rails <5)
Non sembra che ci sia un modo per usare where
di base sintassi hash per generare una query maggiore o minore di per i timestamp. Il modo più semplice e leggibile è delineato nella mia domanda in Current Simple Solution
.
Un altro modo per farlo utilizza ARel ma devi effettuare alcune chiamate meno comuni. Per prima cosa puoi ottenere un handle alla tabella ARel della classe AR, accedere alla colonna, passare il risultato del maggiore di gt
, maggiore o uguale a gteq
, inferiore a lt
, e/o minore o uguale a lteq
metodo con un argomento in where
.
Nella situazione sopra questo sarebbe fatto come:
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)