Вы не можете преобразовать диапазон BigDecimal в массив:
> a = BigDecimal.new('1')
=> #<BigDecimal:12a082bb0,'0.1E1',9(18)>
> b = BigDecimal.new('5')
=> #<BigDecimal:12a076ec8,'0.5E1',9(18)>
> (a..b).to_a
TypeError: can't iterate from BigDecimal
Из тонкой инструкции :
Вы можете выполнять итерации, только если начальный объект диапазона поддерживает метод succ
А у BigDecimal нет метода succ
.Когда вы передаете это:
["users.hour_price_low IN (?)", price_low..price_high]
в ActiveRecord в качестве условия, он, вероятно, видит, что вы дали ему Range, и вызывает to_a
для него что-то, что может быть SQL-ified, и вот гдеваша ошибка исходит от
Я думаю, вы хотите сказать следующее:
[ "users.hour_price_low >= :lo AND users.hour_price_low <= :hi", { :lo => price_low, :hi => price_hi } ]
Подобные проблемы относятся к вашим hour_price_high
.
Даже если price_low
и price_high
были целыми числами, которые вы не хотели бы использовать IN
, диапазон мог бы расшириться до довольно большого списка, и базе данных пришлось бы сравнивать каждое из них по отдельности.