2012-04-15 8 views
24

Tengo el siguiente modelo de validación de campo:Validación para garantizar la singularidad pero ignorando los valores vacíos.

validates_uniqueness_of :acronym, :scope => [:group_id], :case_sensitive => false 

El problema es que este campo es opcional, y un valor de vacío/nula está volviendo como un acrónimo tomado ya. Solo quiero validar que un acrónimo sea único si se proporcionó un valor. ¿Hay alguna manera de actualizar esta validación para que solo se lleve a cabo si hay un valor real ... no nulo/vacío?

Gracias

Respuesta

53

Sí, hay dos opciones posibles que se pueden pasar a validaciones de campos opcionales: :allow_blank o :allow_nil, que se salte las validaciones en blank y nil campos, respectivamente. Si cambia su validación a lo siguiente, debe obtener el comportamiento que desea:

validates_uniqueness_of :acronym, :allow_blank => true, :scope => [:group_id], :case_sensitive => false 
+0

¡Muchas gracias! Mi código es mucho más completo. Otras respuestas sugeridas son: a menos que: si, pero creo que esta es la mejor manera. ¿Algún problema al dejar: group_id fuera de la matriz? –

+1

La especificación para esto es 'it {is_expected.to validate_uniqueness_of (: acronym) .scoped_to (: group_id) .case_insensitive.allow_blank}' –

Cuestiones relacionadas