Podría hacer algo como esto en Rails 2:
def show_rec_horses rec_horses = Horses.find(:all) page["allHorses"].replace_html :partial => "horses/recommended", :locals => {:rec_horses => rec_horses} end¿Cómo hago 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.
Probé algo como (en mi show_rec_horses.js.erb):
$("#interactionContainer").update("<%= escape_javascript(render("horses/recommended"))%>");Y no pasa nada. Probé algunas otras variaciones pero ninguna funcionó. ¿Qué estoy haciendo mal? ¿Debería abordarse esto de alguna otra manera? Cualquier respuesta sería muy apreciada.
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 endEsto asegurará que se representen 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 supongamos que 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, se realizará una solicitud a la acción show_rec_horses en su controlador, esta acción generará 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 llenará 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 %>