Tengo un modelo que tiene dos campos, que llamaré first_name y last_name, y quiero asegurarme de que la combinación de los dos sea insensible a mayúsculas y minúsculas. He llegado a mitad de camino a través de este:Rails validates_uniqueness_of across multiple columns with case insensitivity
validates_uniqueness_of :first_name, :scope => :last_name
El problema es que el control de la unicidad parece ser sensible a mayúsculas, a pesar de que the documentation dice que debe ser sensible a mayúsculas por defecto. Así que dado un registro existente:
{ :first_name => 'John', :last_name => 'Smith' }
Esto se permitirá:
{ :first_name => 'JOHN', :last_name => 'SMITH' }
así como cualquier registro adicional cuando hay alguna variación del caso, ya sea en el primer o el apellido. ¿Por qué se permiten estos registros? ¿Cómo puedo hacer cumplir la unicidad insensible a mayúsculas y minúsculas entre ambos campos?
tienes razón! La documentación que encontré me indujo a error. El ajuste ': case_sensitive => false' lo hizo funcionar para el first_name, pero no funciona en la otra dirección. Todavía aceptará '{: first_name => 'John',: last_name => 'SMITH'}'. ¿Hay alguna manera de hacerlo funcionar bidireccionalmente? ¿Incluiría simplemente dos reglas 'validates_uniqueness_of' con el campo intercambiado? –
Intenté agregar otra validación con los dos campos intercambiados. Ahora se detectarán casos en los que uno de los campos está encapsulado de forma diferente, pero no si ambos son, por lo que esto se cumple: '{: first_name => 'JOHN',: last_name => 'SMITH'}'. –
Solo escribiría un método de validación personalizado en este punto si fuera usted. –