Предполагая, что вы используете Rails 3, у вас есть еще один вариант - создать собственный валидатор:
# You can put this in lib/better_numericality_validator.rb
class BetterNumericalityValidator < ActiveModel::EachValidator
def validate_each(record,attribute,value)
if value < 0
record.errors[attribute] << "must be greater than or equal to 0"
elsif value >= 1000000
record.errors[attribute] << "must be less than 1000000")
end
end
end
Тогда вы можете использовать свой собственный валидатор в вашей модели:
# In your model.rb
validates :price, :better_numericality => true
Этот метод очень похож на ответ Анубхоу. Но использование логики в пользовательском валидаторе позволяет легко повторно использовать валидацию в другом месте, легко тестировать валидатор по отдельности, и я лично считаю, что validates :price, :better_numericality => true
делает вашу модель более чистой, чем альтернатива.