Как реализовать валидатор min / max в Rails 3? - PullRequest
55 голосов
/ 11 декабря 2010

Как rails может реализовать валидатор min 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

Ответы [ 3 ]

102 голосов
/ 05 января 2011

Проверьте ActiveModel :: Validations :: NumericityValidator: RailsAPI NumericityValidator

спецификация:

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
28 голосов
/ 12 апреля 2013

Вы также можете использовать включение ... в , например:

validates :height, inclusion: { in: 1..3000, message: 'The height must be between 1 and 3000' }
10 голосов
/ 14 января 2014
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...