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

Était-ce utile?

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? }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top