Редактиране 2 5/9/20
Ако използвате Ruby 2.6, можете да направите това с безкрайни диапазони, а в Ruby 2.7 можете да използвате диапазони без начало.
Напр.:
# Ruby >= 2.6
User.where(last_deposit: 10.days.ago..)
генерира
SELECT "users".* FROM "users" WHERE "user"."last_deposit" >= '2020-04-29 21:58:39.109419'"
и
# Ruby >= 2.7
User.where(last_deposit: ..10.days.ago)
генерира
SELECT "users".* FROM "users" WHERE "users"."last_deposit" <= '2020-04-29 22:01:05.582055'
Редактиране
Това вече е възможно в Rails 5!
User.where(last_deposit: 10.days.ago..DateTime::Infinity.new)
ще генерира SQL
SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= '2018-06-30 17:08:54.130085').
Оригинален (и Rails <5) отговор
Не изглежда така, сякаш има начин да се използва основно where
хеш синтаксис за генериране на заявка по-голямо или по-малко от за времеви печати. Най-простият и най-четлив начин е описан в моя въпрос под Current Simple Solution
.
Друг начин да го направите използва ARel, но трябва да правите някои по-рядко срещани обаждания. Първо можете да получите манипулатор на таблицата ARel на AR класа, да получите достъп до колоната, да предадете резултата от по-голямото от gt
, по-голямо или равно на gteq
, по-малко от lt
и/или по-малко или равно на lteq
метод с аргумент за where
.
В горната ситуация това би било направено така:
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)