Le validates
est maintenant préféré sur validates_presences_of
etc. Comme mentionné hyperjas vous pouvez le faire:
validates :shipping_cost,
:shipping_cost_anywhere,
:presence => true, :if => :shipping?
Cependant, ce conditionalizes la validation entière pour les :shipping_cost
et :shipping_cost_anywhere
. Pour une meilleure maintenabilité, je préfère une déclaration distincte validate
pour chaque attribut. Plus important encore, vous rencontrerez probablement des situations où vous avez plusieurs validations avec des conditions différentes (comme une pour la présence et une autre pour la longueur, le format ou la valeur).Vous pouvez le faire comme ceci:
validates :shipping_cost,
presence: { if: :shipping? },
numericality: { greater_than: 100, if: :heavy? }
Vous pouvez également laisser les rails évaluer une corde de rubis.
validates :shipping_cost,
presence: { if: "shipping?" },
numericality: { greater_than: 100, if: "shipping? and heavy?" }
Et enfin, le cas échéant ajouter des messages personnalisés séparés:
validates :shipping_cost,
presence: { if: "shipping?", message: 'You forgot the shipping cost.' },
numericality: { greater_than: 100, if: "shipping? and heavy?", message: 'Shipping heavy items is $100 minimum.' }
Et ainsi de suite. J'espère que cela pourra aider.
S'il vous plaît être plus précis sur comment cela ne fonctionne pas bien pour vous. Cela rend plus facile de deviner ce que vous essayez d'exprimer. :) – flooooo
Merci, les champs ': shipping_cost' et': shipping_cost_anywhere' ne sont pas validés si je mets à true le champ ': shipping' – hyperrjas