Вы не можете использовать методы ruby внутри :conditions
. Это не исключительная область действия, она применяется во всех запросах ActiveRecord:
# This won't work either
Product.where(:price_with_discount => min.to_f)
Причина этого в том, что ActiveRecord нуждается в чем-то, что может быть «преобразовано» в поля базы данных. Символ :price_with_discount
не может быть переведен в базу данных.
Кроме того, если вы находитесь на рельсах 3, вам больше не нужны рамки . Обычный метод класса будет делать то же самое, и его легче написать (без лямбд).
class Product < ActiveRecord::Base
def self.by_price(min, max)
# Assuming that products.discount is a database field:
where([ "(products.price - products.discount) >= ? AND " +
"(products.price - products.discount) <= ?",
min, max
])
end
end