jquery - rubyonrails - routes in ruby on rails
link_to y remote=> true+jquery: ¿Cómo? ¿Ayuda? (2)
Estoy tratando de hacer un enlace de "Usuarios" en el índice de mi sitio web de rieles para que muestre a los usuarios registrados (Usuario.todos) PERO quiero que aparezca en la parte derecha del sitio, como parcial, en un div sin Cargando toda la página desde el principio.
Sabía que esto era posible con el antiguo prototipo y el control remoto => verdadero, pero con Rails 3.1 y jQuery (y activos) no tengo idea de cómo hacerlo.
¿Alguien puede ayudarme o mostrarme el camino a un tutorial?
Aquí hay una lista de recursos útiles:
En realidad es bastante fácil, solo se siente como un gran problema porque es nuevo. Básicamente, con el nuevo y discreto soporte de javascript, el script rails ujs expone un conjunto de eventos a los que puede enlazar funciones de javascript, que son:
- ajax: beforeSend - disparado antes de que ocurra el envío
- ajax: éxito: se activa después del envío, contiene la respuesta
- ajax: completo - despedido después del evento de éxito
- ajax: error - se dispara cuando hay errores presentes
todo lo que necesita hacer es escribir una función (que envuelva en $ document.ready) que a su vez vincule algunas funciones anónimas a cada uno de estos eventos, o simplemente los eventos en los que está interesado.
Por ejemplo, suponga que tiene un div en el que desea colocar los datos de respuesta con un id de "response_data", y tiene un enlace con un id de "ajax_trigger". Algo como esto:
<%= link_to "My Link", some_model_path(@model_instance),
:remote => true, :html => {:id => "ajax_trigger"} %>
<div id="response_data">
</div>
Todo lo que necesita hacer es proporcionar una función como la que se muestra a continuación para poner la respuesta del servidor en la div:
$(document).ready(
function(){
$("a#ajax_trigger").bind("ajax:success",
function(evt, data, status, xhr){
//this assumes the action returns an HTML snippet
$("div#response_data").html(data);
}).bind("ajax:error", function(evt, data, status, xhr){
//do something with the error here
$("div#errors p").text(data);
});
});
Realmente, todo lo que está haciendo con el javascript es manejar la respuesta cuando regresa del servidor. Realmente no tiene que hacer nada especial para iniciar la solicitud XHR, y también puede guardar este método de forma segura en el archivo .js que se presenta como un activo estático. Si está utilizando Rails 3.1, debe colocarlo en el archivo javascript con el nombre apropiado que corresponda al controlador. En su controlador, debe asegurarse de especificar: layout => false en el método responds_with (), de esa manera el controlador solo devuelve el parcial o la plantilla que representa, en lugar de una página completa. Esta configuración también funciona con acciones que devuelven el javascript que ejecuta el cliente y JSON, según el tipo de datos que especifique en la solicitud.
Encontré esta publicación del blog muy útil: http://www.alfajango.com/blog/rails-3-remote-links-and-forms/