Как реализовать валидатор min/max в Rails 3?
Что такое рельсы для реализации модуля проверки max max в Rails 3?
У меня есть модель с атрибутами min_age и max_age.
Возраст может быть в диапазоне 0..100, но я хочу также проверить значения пересечения, я имею в виду, что max больше или равно min
{:min_age => 0, :max_age => 0} => true
{:min_age => 0, :max_age => 1} => true
{:min_age => 1, :max_age => 0} => false # max < min
{:min_age => 1, :max_age => 101} => false # out of 0..100 range
Ответы
Ответ 1
Проверьте ActiveModel:: Validations:: NumberericalityValidator:
RailsAPI NumericalityValidator
Спецификация:
it {
subject.max_age = 10
subject.min_age = 20
subject.should be_invalid
subject.errors[:min_age].should include("must be less than or equal to #{subject.max_age}")
}
код:
validates :min_age, numericality: { greater_than: 0, less_than_or_equal_to: :max_age }
validates :max_age, numericality: { less_than_or_equal_to: 100 }
Я не знаю, хотите ли вы проверить наличие или нет, но вы просто добавили бы это как еще один ключ к вашим проверкам, например.
validates :max_age, numericality: { less_than_or_equal_to: 100 }, presence: true
Ответ 2
Вы также можете использовать включение... в, как в:
validates :height, :inclusion => { :in => 1..3000, :message => "The height must be between 1 and 3000" }
Ответ 3
validates_numericality_of :min_age, greater_than: 0
validates_numericality_of :max_age, less_than_or_equal_to: 100
validates_numericality_of :max_age, greater_than: :min_age
Вы также можете использовать возраст, например:
validates_numericality_of :age, less_than_or_equal_to: 100, greater_than: 0