2012-03-27 19 views
9

tengo una cadena campo foo que deben cumplir cuatro condiciones:validaciones de formato múltiple en los carriles

  • Debe ser no esté en blanco
  • Debe ser único para todos los registros
  • Sólo debe contener letras , dígitos, y hypens
  • no debe comenzar con la "barra" cadena

los dos primeros son manejados por :presence y :uniqueness validaciones. Los últimos dos se manejan fácilmente mediante validaciones :format a través de expresiones regulares.

¿Es posible incluir varias reglas de validación :format, con valores diferentes de :message?

me gustaría evitar la combinación de las dos condiciones en una sola expresión regular. Además de los mensajes múltiples, creo que es más fácil de leer y escribir si son distintos.

Lo ideal es que me gustaría que todos estos se envuelvan en una sola llamada validates, pero eso no es estrictamente necesario.

Respuesta

17

De acuerdo con source code for the validates method, no hay forma de hacerlo; obtienes una clave :format y un conjunto de opciones como valor hash.

Sin embargo, no hay nada que me impida llamar validates dos veces:

validates :foo, 
    :presence => true, 
    :uniqueness => true, 
    :format => { 
    :with => /^[\w\-]*$/, 
    :message => 'may only contain letters, digits, and hyphen' 
    } 
validates :foo, :format => { 
    :with => /^(?!bar)/, 
    :message => 'may not start with "bar"' 
} 

Esto parece funcionar bien.

1

Uno puede validar múltiples atributos incrustados, como el Validator#validate source code. Entonces puede más limpio como abajo:

validates :foo, 
    :presence => true, 
    :uniqueness => true, 
    :format => {`enter code here` 
    :with => /^[\w\-]*$/, 
    :message => 'may only contain letters, digits, and hyphen' 
    }, 
    :format => { 
    :with => /^(?!bar)/, 
    :message => 'may not start with "bar"' 
    } 
} 
Cuestiones relacionadas