cómo pasar proc condiciones en las valida
-
21-12-2019 - |
Pregunta
¿Cómo puedo escribir de validación de código de barras que será único para todos los usuarios, donde is_deleted
es falsa y la misma cadena?
validates :barcode, uniqueness: { conditions: -> { |record| where(is_deleted: false, chain_id: record.chain_id) } }, if: proc { |u| u.barcode.present? }
¿qué está mal aquí?
Gracias.
upd.No puede haber dos usuarios con el mismo código de barras con el mismo chain_id, si uno de ellos o ambos tienen :is_deleted => true
Solución
validates :barcode, uniqueness: { scope: :chain_id, conditions: ->{ where(is_deleted: false) } }, if: proc { |u| u.barcode.present? && u.active? }
Se me ocurrió una solución. Gracias y lo siento, es tarde aquí y la cabeza no funciona como se esperaba :)
Otros consejos
Validación de los rieles tiene parámetros de if
y unless
que le permiten agregar condiciones, lo usó para verificar la presencia de código de barras correctamente, pero también puede extenderlo por is_deleted
también.
En cuanto a la identificación de la cadena, entiendo que usted está interesado en el alcance.
en su caso que sería
validates :barcode, uniqueness: { scope: [:chain_id] }, if: proc { |u| u.barcode.present? && w.is_deleted.false? }