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-запросам.