2009-07-31 14 views
10

Tengo una colección de objetos ActiveRecord. Quiero poder ejecutar todas las validaciones para cada uno de estos objetos sin realmente guardarlos en la base de datos. Solo quiero saber si serían válidos si los guardara en la base de datos. En otras palabras, esencialmente quiero rellenar la estructura de datos errors para cada uno de mis objetos. ¿Hay alguna forma de hacer esto? ¿O quizás me falta algo sobre el ciclo de vida de la colección errors?Ejecutar validaciones de ActiveRecord sin guardar

Respuesta

23

puede hacer lo siguiente para comprobar si un modelo es válido:

@user = User.new 
if @user.valid? 
    #do things 

Si quieres ver lo que los errores son, que puede hacer:

@user = User.new 
unless @user.valid? 
    @user.errors.each {|k, v| puts "#{k.capitalize}: #{v}"} 

Llamando al ".¿válido?" método ejecuta sus validaciones, colocando todos sus errores en un objeto ActiveRecord :: Errors, al que se puede acceder como lo hice en el ejemplo anterior. Pruebe los ejemplos en la consola para obtener una idea si lo desea.

+0

En la misma línea, estoy tratando de mostrar un enlace de publicación basado en el registro es válido para publicar o no. En mis validaciones, estoy usando validates: if format. ¿Hay alguna manera fácil de cambiar el atributo para decir: verdadero y luego verificar si es válido para publicar? Por ej. post = Post.new (: title => "title",: published => false) post.published = true si post.valid? post.published = false – chetu

2

Al ejecutar el método #valid? en el objeto, se ejecutarán todas las validaciones y se completará la estructura errors.

dude = Person.new 
unless dude.valid? 
    # Examine errors 
end 
Cuestiones relacionadas