date_time
это объект String или DateTime? это может быть проблемой.
Поскольку оба объекта String и Datetime принимают метод between?
, оба наследуются в конце от Comparable https://apidock.com/ruby/Comparable/between%3F
Строка будет сравниваться буквенно
'11'.between?('0','2') # => true
Объект DateTime будет вызывать between?
для объектов Time, которые представлены в виде целого числа, и обычно сравнивается
11.between?(0,2) # => false
Если date_time
- это строка, я бы предложил изменить ее на тип столбца DATETIME, это имеет смысл с точки зрения семантики. Если вы не можете изменить его, вы можете добавить собственный метод получения, чтобы он возвращал объект DateTime при разборе строки.
def date_time
DateTime.parse(self[:date_time])
end
Я не настолько знаком с операторами SQL и их оптимизацией, но я предполагаю, что они обычно сравнивают оба, это объясняет, почему работает запрос, а не метод between?
. Тем не менее, я не могу подтвердить это, я просто догадываюсь (возможно, это даже зависит от реализации и механизма таблиц, я не знаю).