comment passer des proc de conditions valide
-
21-12-2019 - |
Question
Comment puis-je écrire de validation pour les codes-barres unique pour tous les utilisateurs, où is_deleted
est faux et même chaîne?
validates :barcode, uniqueness: { conditions: -> { |record| where(is_deleted: false, chain_id: record.chain_id) } }, if: proc { |u| u.barcode.present? }
quel est le problème ici?
Merci.
upd.Il peut y avoir deux utilisateurs avec le même code à barres avec les mêmes chain_id, si l'un d'eux ou les deux ont :is_deleted => true
La solution
validates :barcode, uniqueness: { scope: :chain_id, conditions: ->{ where(is_deleted: false) } }, if: proc { |u| u.barcode.present? && u.active? }
Je suis venu avec une solution.Merci et désolé, sa fin d'ici et de la tête ne fonctionne pas comme prévu :)
Autres conseils
Rails de validation ont if
et unless
les paramètres qui vous permettent d'ajouter des conditions, vous l'avez utilisé pour vérifier le code à barres présence correctement, mais vous pouvez l'étendre pour is_deleted
ainsi.Quant à la chaîne d'id, je comprends que vous êtes intéressé à portée.
Dans votre cas, ce serait
validates :barcode, uniqueness: { scope: [:chain_id] }, if: proc { |u| u.barcode.present? && w.is_deleted.false? }