Rieles 3: Comparar códigos únicos

¿Cuál es la mejor manera de garantizar que un código es único? El código es XXX-XXXXX, donde X es solo un número.

¿Qué otra manera que no sea buscar el código en una tabla de base de datos para hacer que el proceso sea más rápido y limpio?

Saludos.

  1. El enfoque normal es utilizar :uniqueness validación de :uniqueness . Eso maneja db search.
  2. Más a prueba de balas es usar 1) + índice único en ese campo. Si el guardado falla sin errores de validación, puede generar un nuevo código y volver a intentarlo.

Ya que no hay dos veces iguales, usar algún tipo de hash basado en el tiempo es la forma más fácil de garantizar la singularidad. Sin embargo, si está almacenando xxx-xxxx, se está limitando. También puede utilizar un valor único de incremento automático. Almacene el valor del lado del servidor para el siguiente número que se asignará y luego auméntelo cada vez que emita un nuevo ID único.

Ambas son opciones aceptables sin conocer información adicional.

Un hash basado en el tiempo no está realmente “garantizado” para ser único. Usar algún tipo de hash es solo una forma de crear un resumen a partir de una gran fuente de datos. Dado que todos los datos se pueden describir en 128 bits (utilizando md5), es posible encontrar colisiones de hash.

Valida: uniquness realizará una consulta para determinar si el valor de los campos se ha utilizado anteriormente. Puedes usar esto pero no debería ser tu única solución. Si se pretende que el campo sea único, debe colocar un índice único en la columna en la base de datos. Si solo confía en la validación de los Rails, corre el riesgo de una condición de carrera en la inserción de datos en la tabla. Puedo omitir la validación, pero otra escritura también podría haber pasado la validación y ambos terminaron metiéndose en la tabla.

¿Está generando el valor o es entrada de usuario?