Pregunta

Tengo un formulario que estoy enviando a través de AJAX (usando el prototipo y el asistente integrado 'form_remote_tag' de los rieles).
Lo que me gustaría es actualizar un div (un área de estado) si hay errores de validación del formulario pero un div diferente (el div donde vive el formulario) si el envío se realiza correctamente.

Mi código se ve así:

<div id="recipe-status"><!-- I want form validation errors to go here --></div>
<div id="recipe">
    <%= form_remote_tag(:update => "recipe-status",
       :before => "Element.show('wait-indicator')",
       :success => "Element.hide('wait-indicator')",
       :complete => visual_effect(:appear, "recipe-status"),
       :url => { :action => 'import', :id => @recipe.id },
        :failure => "alert('Unable to import recipes at present')") %>
    <-- Form goes here, I want this to be replaced if the submit succeeds -->
</div>

La única forma en que se me ocurre hacer esto es devolver un estado de error HTTP si hay un error de validación, pero parece un truco. ¿Hay alguna forma más limpia de hacerlo?

¿Fue útil?

Solución

Verificaría las últimas Railscasts en jQuery , así como un episodio anterior en plantillas RJS . Esos deberían ayudarlo a funcionar con AJAX y su aplicación Rails y hacer que todo funcione de manera correcta y limpia sin ningún truco.

Después de mirar su código, sugeriría usar jQuery (vea el episodio anterior), extraerá todo el javascript de su formulario lo que lo hace mucho menos molesto (que es algo muy bueno).

Parece que has bajado las técnicas, por lo que rápidamente comenzarás a escribir Javascript discreto con jQuery y es probable que termines siendo una persona mucho más feliz con una aplicación mucho más limpia. :)

¡Buena suerte!

Otros consejos

Recomendaría, como se señaló en otra respuesta, que considere usar jQuery. Sin embargo, eso requerirá cierto aumento, así que seguir con los valores predeterminados de Rails para que pueda avanzar más rápidamente ...

Lo que quiere analizar es el RJS en línea. En lugar de hacer todo en la llamada form_remote_tag, puede hacer sus actualizaciones AJAX desde su controlador. De esa manera, puede administrar la lógica de si hay o no errores de validación y ejecutar una u otra actualización AJAX (a cualquier div) dependiendo de eso.

Consulte esta publicación de Jamis Buck para empezar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top