2011-02-24 12 views
22

que podía hacer algo como esto en los carriles 2:¿Cómo se renderiza parcial a través de AJAX y jQuery en rails3

def show_rec_horses 
    rec_horses = Horses.find(:all) 
    page["allHorses"].replace_html :partial => "horses/recommended", :locals => 
{:rec_horses => rec_horses} 
end 

¿Cómo se hace esto en Rails3 con jQuery. Entonces, ¿cómo puedo reemplazar html de mi div con una llamada parcial a través de ajax (link_to: remote => true) en Rails3.

he intentado algo similar (en mi show_rec_horses.js.erb):

$("#interactionContainer").update("<%= escape_javascript(render("horses/recommended"))%>"); 

y no pasa nada. Intenté algunas otras variaciones pero ninguna funcionó. ¿Qué estoy haciendo mal? ¿Debería abordarse esto de alguna otra manera? Cualquier respuesta sería muy apreciada.

Respuesta

26

Bien, comencemos con el controlador.

def show_rec_horses 
    @rec_horses = Horses.find(:all) 

    respond_to do |format| 
    format.html # show_rec_horses.html.erb 
    format.js # show_rec_horses.js.erb 
    end 
end 

Esto asegurará que se estén procesando las plantillas correctas para una solicitud html o una solicitud javascript. Si solo necesita responder a una solicitud de JavaScript, elimine la parte html.

Ahora digamos que usted tiene una página que contiene lo siguiente:

<p><%= link_to 'Show Horses', show_rec_horses_path, remote: true %></p> 

<div id="interactionContainer"></div> 

Al hacer clic en el enlace hará una petición a la acción show_rec_horses en su controlador, esta acción hará que el archivo javascript show_rec_horses.js.erb.

Este archivo JavaScript debe contener algo como esto:

$('#interactionContainer').html('<%=j render partial: 'horses/reccommended', locals: { rec_horses: @rec_horses } %>') 

Ahora su contenedor se llena con el contenido de horses/_reccommended.html.erb, que por ejemplo podría contener:

<% rec_horses.all.each do |rec_horse| %> 
    <p><%= rec_horse.name %></p> 
<% end %> 
+0

Gracias, esto realmente me ayudó . – Narayana

+1

Lejos ... ¡eso fue más fácil de lo que sospechaba! ¡Muchas gracias! –

+0

No funcionó para mí hasta que eliminé el "responder_al hacer | formato |" bloque –

Cuestiones relacionadas