2012-06-11 16 views
11

que tienen estos campos de cadena/de texto en mi base de datos de archivo de migración:Validación de Rails ActiveRecord: ¿longitud máxima de una cadena?

t.string :author 
    t.string :title 
    t.string :summary 
    t.text :content 
    t.string :link 

y estos son mis preguntas:

  1. Cada atributo de cadena/texto debe tener una validación de longitud máxima para ambos propósitos, la seguridad (si no desea recibir unos pocos MB de entrada de texto) y la base de datos (si string = varchar, mysql tiene un límite de 255 caracteres). ¿Es correcto o hay alguna razón para no tener una validación de longitud máxima para todos los atributos de cadena/texto en la base de datos?
  2. Si no me importa la longitud exacta del autor y el título tanto tiempo, ya que no son demasiado largos para ser almacenados como cadenas, ¿debo establecer una longitud máxima de 255 para cada uno de esos?
  3. Si la longitud máxima posible de URL es de unos 2000 caracteres, ¿es seguro almacenar enlaces como cadenas y no como textos? ¿Debería estar validando una longitud máxima del atributo de enlace si ya estoy validando su formato usando regexp?
  4. ¿Debe un atributo de contenido (texto) tener una longitud máxima solo para proteger la base de datos de la entrada de una longitud ilimitada? Por ejemplo, ¿es razonable establecer una longitud máxima de un campo de texto de hasta 100.000 caracteres, o esto es totalmente inútil e ineficiente?

Entiendo que estas preguntas pueden parecerle sin importancia a algunas personas, pero aún así, esa es una validación de entrada, que se requiere para cualquier aplicación, y creo que vale la pena ser un poco paranoico.

Respuesta

5

La pregunta es genial, y tal vez las personas con más conocimiento de rails/mysql internals podrán expandirse más.

1) Tener cualquier validación en el modelo depende de dónde quiera que ocurra la falla en caso de que exceda el límite. El modelo es la mejor opción, ya que lo más probable es que abarque la mayoría de los objetos que usan el modelo. Otra alternativa es simplemente limitar campos de formulario utilizando el atributo maxlength.

La primera opción no funciona para los campos opcionales.

2) No tengo conocimiento de ninguna regla general. Usa todo lo que sabes que es más largo y hazlo un poco más grande.

3) Mi regla es que cualquier cosa superior a 255 es texto. Puede encontrar más información en este Here

4) Si la columna tiene el mismo contenido, puede haber un valor en eso. Algunos casos de uso pueden tener diferentes longitudes máximas según el tipo de contenido o el usuario.

Todo lo anterior también se ve afectado por la rigidez de los requisitos de validación de datos en el proyecto.

Cuestiones relacionadas