58 votes

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 attributs min_age et max_age.

L'âge peut être compris entre 0 et 1,00, mais je souhaite également 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 < min
{:min_age => 1, :max_age => 101} => false # out of 0..100 range
 

105voto

rayban Points 526

Découvrez le modèle actif :: 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 ou non la présence, mais vous ajouteriez simplement cela comme une autre clé à vos validations, par exemple

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

31voto

user456584 Points 8772

Vous pouvez également utiliser l' inclusion ... dans , comme dans:

 validates :height, :inclusion => { :in => 1..3000, :message => "The height must be between 1 and 3000" }
 

12voto

EastsideDeveloper Points 732
 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
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X