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

¿Fue útil?

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? }

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top