Comment implémenter le validateur min / max dans Rails 3?

Quelle est la façon dont les rails implémentent un validateur min max dans Rails 3?

J’ai un modèle, avec les atsortingbuts min_age et max_age.

L’âge peut être compris entre 0 et 100, mais je veux aussi valider les valeurs de croisement, je veux dire que max est supérieur ou égal à min

{:min_age => 0, :max_age => 0} => true {:min_age => 0, :max_age => 1} => true {:min_age => 1, :max_age => 0} => false # max  1, :max_age => 101} => false # out of 0..100 range 

Découvrez l’ActiveModel :: Validations :: NumericalityValidator: RailsAPI NumericalityValidator

spec:

 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}") } 

code:

 validates :min_age, numericality: { greater_than: 0, less_than_or_equal_to: :max_age } validates :max_age, numericality: { less_than_or_equal_to: 100 } 

Je ne sais pas si vous voulez valider la présence ou non, mais vous appendiez simplement cela comme une autre clé de vos validations, par exemple

 validates :max_age, numericality: { less_than_or_equal_to: 100 }, presence: true 

Vous pouvez également utiliser l’ inclusion … dans , comme dans:

 validates :height, inclusion: { in: 1..3000, message: 'The height must be between 1 and 3000' } 
 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 

Vous pouvez également utiliser l’âge, comme ceci:

 validates_numericality_of :age, less_than_or_equal_to: 100, greater_than: 0