Вы редко должны упасть до написания необработанного SQL в рельсах (например, с помощью метода find_by_sql
) - особенно для такого простого запроса, как это.
Вместо этого, вы можете просто написать следующее и ActiveRecord
правильно преобразовать его в допустимый синтаксис SQL для вас:
# If you are looking for a list of all matching entries:
Policy.where(acct_ent_date: start_date..end_date)
# If you only wish to fetch the FIRST matching entry:
Policy.find_by(acct_ent_date: start_date..end_date)
Это будет генерировать SQL вроде следующего:
SELECT `policies`.* FROM `policies` WHERE (`policies`.`acct_ent_date` BETWEEN xxxxx AND yyyyy)
Ключевая проблема с исходным (необработанным SQL) кодом заключается в том, что вы используете синтаксис WHERE IN
- это действительно просто shorthand для нескольких условий ИЛИ. Это не имеет смысла использовать для объекта Range
(start_date..end_date
), поскольку он не является дискретным списком (то есть Array
).
Если вы должны были попытаться преобразовать объект в массив, вы увидите что-то ошибки, как это:
(start_date..end_date).to_a # => TypeError: can't iterate from Time
Какой запрос вы получаете при компиляции? –