validates_presence_of si la condition sur les rails 3.2 et mongoid + simple_form
Je veux valider la présence de ces 2 attributs :shipping_cost
et :shipping_cost_anywhere
si l'attribut :shipping
est égal à true
. et Si
J'ai ceci dans mon modèle, mais ne fonctionne pas très bien pour moi:
validates_presence_of :shipping_cost, :shipping_cost_anywhere, :allow_blank => "true" if :shipping == "true"
c'est mon :expédition attribut:
field :shipping, :type => Boolean, :default => "false"
Comment puis-je le faire?
Merci!
Édité.
Je suis l'aide de mongoid et simple_form gemmes
Veuillez être plus précis sur la manière dont il ne fonctionne pas correctement pour vous. Qui le rend plus facile à deviner ce que vous essayez d'exprimer. 🙂
Merci, les champs
Merci, les champs
:shipping_cost
et :shipping_cost_anywhere
ne sont pas validés si je défini à true, le champ :shipping
OriginalL'auteur hyperrjas | 2012-05-08
Vous devez vous connecter pour publier un commentaire.
La méthode renvoie true ou false lorsqu'elle est appelée dans la déclaration.
Pas besoin de mettre du côlon en face de shipping_costs_anywhere.
undefined method should_be_filled_in? for #<Item:0xfd43028>
la méthode doit être should_be_filled_in? plutôt que de should_be_filled_in
Merci, j'ai vérifié avec cela, mais il ne fonctionne pas très bien pour moi. Merci!!!!
Lors de l'utilisation :should_be_filled_in? il vérifie les 2 valeurs true ou false assurez-vous d'assigner à :shipping_costs_anywhere dans votre formulaire. quand ils sont retournés vrai, vous voulez vous demander :shipping_costs_anywhere == true. si vous voulez vérifier si il est rempli de vide, vous pourriez voulez que :shipping_costs_anywhere != ""
conditionnel validations besoin d'un symbole pour la méthode
OriginalL'auteur dennis
Le correctif pour moi à cette question est le suivant code:
Merci à tous pour votre aide, mais aucune réponse a fonctionné pour moi. merci!
OriginalL'auteur hyperrjas
Suis tombé sur ça aujourd'hui et j'ai pensé à rafraîchir la réponse. Comme d'autres l'ont mentionné, vous pouvez mettre de la logique dans une fonction. Cependant, vous pouvez aussi simplement le jeter dans un proc.
http://guides.rubyonrails.org/active_record_validations.html#using-a-symbol-with-if-and-unless
OriginalL'auteur Mark Nadig
La
validates
est maintenant préféré survalidates_presences_of
etc. Comme hyperjas mentionné que vous pouvez faire ceci:Cependant, que conditionalizes l'ensemble de validation pour les deux
:shipping_cost
et:shipping_cost_anywhere
. Pour une meilleure maintenabilité, je préfère séparervalidate
déclaration pour chaque attribut.Plus important encore, vous allez probablement rencontrer des situations où vous avez plusieurs validations avec des conditions différentes (comme une présence et une autre pour la longueur, le format ou la valeur). Vous pouvez le faire comme ceci:
Vous pouvez également laisser rails évaluer un rubis chaîne.
Et enfin, vous pouvez également ajouter distinct des messages personnalisés:
Et ainsi de suite. Espérons que cela aide.
OriginalL'auteur IAmNaN
Je ne peux pas le tester, mais je pense que la syntaxe est plus du genre:
Voir:
http://guides.rubyonrails.org/active_record_validations_callbacks.html#conditional-validation
Je vous remercie, mais cela, il ne fonctionne pas très bien pour moi.
Il n'est pas clair pour moi sur la base de votre question et, plus tard, commentaire si vous le souhaitez valider lors de l'expédition est vrai, ou lorsqu'il est pas true. Pour valider lors de l'expédition est vrai, utiliser
:unless
. Si vous souhaitez valider lors de l'expédition est pas true, l'utilisation:if
.Merci le problème est que si je supprime
:allow_blank => "true"
toujours valider les champs, la condition est ignoré, mais Si j'ajoute le:allow_blank => "true"
jamais valider le formulaire, la condition est ignoré...OriginalL'auteur Steve Rowley
Voici mon code fonctionne chez moi.Appel de méthode sur si la condition plutôt que de comparer
Espère que cela vous aide.......
OriginalL'auteur Kashiftufail