99 votes

Rails : Valider la longueur min et max d'une corde mais la laisser vierge

J'ai un domaine que j'aimerais valider. Je veux que le champ soit laissé vide, mais si un utilisateur entre des données, je veux qu'il soit dans un certain format. Actuellement, j'utilise les validations ci-dessous dans le modèle, mais cela ne permet pas à l'utilisateur de le laisser vide :

validates_length_of :foo, :maximum => 5
validates_length_of :foo, :minimum => 5

Comment puis-je écrire ceci pour atteindre mon objectif ?

150voto

quainjn Points 452

Vous pouvez également utiliser ce format :

validates :foo, length: {minimum: 5, maximum: 5}, allow_blank: true

Ou comme vos min et max sont les mêmes, les éléments suivants fonctionneront également :

validates :foo, length: {is: 5}, allow_blank: true

147voto

DigitalRoss Points 80400

Je pense qu'il pourrait avoir besoin de quelque chose comme :

validates_length_of :foo, minimum: 5, maximum: 5, allow_blank: true

Plus d'exemples : ActiveRecord : :Validations : :ClassMethods

15voto

Fellow Stranger Points 1068

Ou encore plus concis (avec la nouvelle syntaxe de hachage), à partir de la documentation validée :

validates :foo, length: 5..5, allow_blank: true

La limite supérieure devrait probablement représenter quelque chose de plus significatif comme "in : 5..20", mais en répondant simplement à la question à la lettre.

11voto

Gareth Points 42402

À partir de la documentation validates_length_of :

validates_length_of :phone, :in => 7..32, :allow_blank => true

:allow_blank - L'attribut peut être vide ; sauter la validation.

3voto

keymone Points 3947

every validates_* accepte :if ou : à moins que les options

validates_length_of :foo, :maximum => 5, :if => :validate_foo_condition

où validate_foo_condition est la méthode qui renvoie true ou false

vous pouvez également passer un objet Proc :

validates_length_of :foo, :maximum => 5, :unless => Proc.new {|object| object.foo.blank?}

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