On Rails 5.
J'ai un modèle Order
avec un attribut description
. Je ne veux valider sa présence que si l'une des deux conditions est remplie: si l'étape en cours est égale à la première étape OR si require_validation est égal à true.
Je peux facilement valider en fonction d'une condition comme celle-ci:
validates :description, presence: true, if: :first_step?
def first_step?
current_step == steps.first
end
mais je ne sais pas comment procéder pour ajouter une autre condition et valider si l'une ou l'autre est vraie.
quelque chose comme:
validates :description, presence: true, if: :first_step? || :require_validation
Merci!
Vous pouvez utiliser un lambda pour le if:
clause et faire une condition ou.
validates :description, presence: true, if: -> {current_step == steps.first || require_validation}
Pouvez-vous simplement l'envelopper dans une seule méthode? Selon les docs
: if - Spécifie une méthode, un proc ou une chaîne à appeler pour déterminer si la validation doit avoir lieu (par exemple, si:: allow_validation, ou si: Proc.new {| user | user.signup_step> 2}). La méthode, proc ou chaîne doit renvoyer ou évaluer une valeur vraie ou fausse.
validates :description, presence: true, if: :some_validation_check
def some_validation_check
first_step? || require_validation
end
Vous pouvez passer un lambda à évaluer comme condition if
.
Essayer:
validates :description, presence: true, if: -> { first_step? || require_validation }
Si vous ne voulez pas ajouter une méthode comme le dit Jared, vous pouvez essayer d'utiliser lambda
validates :description, presence: true, if: ->{ first_step? || require_validation }