Esto parece como un tonto problema, pero no puedo encontrar la respuesta a cualquier lugar!

Es posible update_attributes() y saltar validaciones, como en save(validate: false)?

Tengo un largo formulario con algunos largos text (no string) campos, y me gustaría ofrecer al usuario la posibilidad de guardar su progreso en el formulario. Normalmente, quiero longitud, mínimos, etc, en las respuestas antes de que sean capaces de presentar y seguir adelante, pero en el caso de que sólo se están haciendo clic en «Guardar» me gustaría poner cualquier progreso que hayan realizado en la base de datos para que pueda volver y terminar más tarde. Hay una manera de saltarse las validaciones en este caso?

De mirar a su alrededor, parece que la única cosa que puedo hacer es enumerar cada campo de forma individual como de forma:

@obj.field1 = ...
@obj.field2 = ...
@obj.field3 = ...
...
@obj.save(:validate => false)

Es que realmente el caso? Yo estaría preocupado acerca de cómo agregar otro campo en algún momento en el futuro y el olvido de actualizar el controlador de aquí.

  • Véase también esta pregunta si usted es sólo la actualización de un atributo.
InformationsquelleAutor Gabe Durazo | 2012-04-09

1 Comentario

  1. 28
    @obj.attributes = params[:obj]
    @obj.save(false)

    Actualización para Rails 3

    @obj.attributes = params[:obj]
    @obj.save(:validate => false)
    • Ah, que lo hizo! Gracias, muy simple.
    • cabe @obj.guardar(validar:falso)
    • Se puede hacer esto con sólo una cierta validación de @thekindofme ?
    • no estoy seguro de eso.
    • @obj.save(validate:false) sólo funciona en los Carriles 3 y hasta.
    • false) no se deprecian en rails 3 o 4, afaik, y para algunos cohetes más legible que los dos puntos. Esperemos más código de trabajo no queda invalidado por el obligado, ‘nueva sintaxis de actualizaciones» en cualquier momento pronto.
    • Es posible omitir la validación de sólo algunas columnas con update_attributes ? porque necesito actualizar sólo algunas columnas, me puede sugerir alguna idea ?

Dejar respuesta

Please enter your comment!
Please enter your name here