2011-09-25 13 views
5

¿Hay alguna manera de desencadenar la validación solo en formularios específicos (acción del controlador), no globalmente en cada operación de guardado o actualización? Algo así como User.create(:validate=>true) bandera.Validación solo en forma específica

+0

¿Por qué intentas hacer esto? Quizás podamos dar una mejor respuesta si conocemos los motivos de su pregunta. – rdvdijk

+0

Tengo un problema con el modelo de usuario, no separado del perfil, cuando te registras necesitas proporcionar solo algunos campos y el resto es completarlo desde editar la acción del usuario. – methyl

+0

Por cierto, puede pasar todas las validaciones de ese modo: Model.save (falso) – emrahbasman

Respuesta

8

Sí, puede proporcionar condicionales a las validaciones, por ejemplo:

validates_presence_of :something, :if => :special? 

private 

def make_sepcial 
    @special = true 
end 

def special? 
    @special 
end 

Ahora todo lo que tiene que hacer para activar estas validaciones es:

s = SomeModel.new 
s.make_special 
+0

Entonces, tengo que configurar especial a falso después de guardar el modelo, ¿verdad? – methyl

+0

No. '@ special' es solo una variable de instancia. A menos que tenga más trabajo que hacer, puede dejar que se muera, pero no persistirá en otras consultas de bases de datos. – thomasfedb

4

Como se ha explicado en los comentarios, desea omitir la validación de nuevos registros. En ese caso, puede utilizar la respuesta de thomasfedb, pero no use la variable @special, pero:

validates_presence_of :something, :if => :persisted? 

Esto validará sólo por guardados User s, pero no para los nuevos User s. Consulte la documentación de API en persisted?.

+0

También puede usar: unless =>: persisted? si desea la validación inversa, en la nueva, pero no para la guardada. –

+0

Esta es la respuesta correcta – doz87

Cuestiones relacionadas