Настройка
Метод Rails where
может принимать диапазон в хеше, чтобы сгенерировать запрос, который будет искать значение, находящееся в пределах диапазона. Например:
User.where(cash_money: 10..1000)
#=> SELECT `users`.* FROM `users` WHERE (`users`.`cash_money` BETWEEN 10 AND 1000)
Это также можно использовать с отметками времени, например
User.where(last_deposit: 10.days.ago..1000.days.ago)
#=> SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` BETWEEN '2014-05-19 14:42:36' AND '2011-09-02 14:42:36')
Я обнаружил, что вы можете сделать простой, чем или больше, чем с числами, используя синтаксис хэша, подобный этому
User.where(cash_money: 10..Float::INFINITY)
#=> SELECT `users`.* FROM `users` WHERE (`users`.`cash_money` >= 10)
и то же самое можно сделать с помощью -Float::INFINITY
меньше запросов.
Вопрос
Есть ли способ сделать это с помощью временных меток, чтобы я мог получить такой запрос:
SELECT `users`.* FROM `users` WHERE (`users`.`last_deposit` >= '2014-05-19 14:42:36')
Я не могу использовать Float::INFINITY
или Date::Infinity
с диапазоном, поскольку оба они имеют ошибку с ArgumentError: bad value for range
.
Текущее простое решение
User.where('`users`.`last_deposit` >= ?', 10.days.ago)
будет генерировать тот же SQL, но если это можно сделать с объектами, отличными от строк, я бы хотел сделать это.
Ответ на потенциальный (мех)
Это отвратительно, но это можно сделать с диапазонами с использованием Time.at(0)
и Time.at(Float::MAX)
. У меня такое чувство, что это может привести к столь же отвратительным SQL-запросам.