2011-05-05 25 views
6

Parece una pregunta simple, pero parece que no puedo encontrar una respuesta más que escribir validadores personalizados. Tengo este validadorRails 3 valida la regla en función de la acción

validates :password, :presence => true, :confirmation => true, :length => { :minimum => 5} 

hay más reglas aplicadas, como algunas expresiones regulares para la complejidad, pero esto da la esencia.

El problema es que solo quiero que se aplique la presencia en la creación, todo lo demás debe estar en crear y actualizar. Debido a que el usuario no puede cambiar una contraseña al actualizar su información.

intenté dividir las reglas

validates :password, :presence => true, :on => :create 
validates :password, # The rest of the rules 

Esto dio lugar a todas las reglas de ser ignorado por la actualización. ¿Existe una forma simple de aplicar una sola regla para crear y el resto para todo?

Respuesta

6

Usted puede tratar de mantenerlo en una línea, pero la aplicación de :on => :create a sólo el cheque :presence:

validates :password, :presence => {:on => :create}, :confirmation => true, :length => { :minimum => 5} 

Sin embargo, no estoy seguro de que tiene sentido siempre requiere una longitud mínima, pero no siempre requieren presencia: si actualiza un registro existente con una contraseña en blanco, va a fallar validaciones de todos modos ya que la longitud es 0.

+0

Buen punto. Puede que tenga que mirarlo un poco más profundo. Algunos de los requisitos de una contraseña introducida pueden fallar si está vacía. –

0

Mi corazonada es que el problema es que la llamada validate: password no es aditiva. Puede cambiar el control de presencia a:

validates_presence_of :password, :on=>:create 

Y luego conserve sus otras validaciones con la validación. ¿Eso funciona?

Cuestiones relacionadas