2011-02-24 78 views
22

部分我可以做某事像這樣在軌道2:我如何通過渲染在Rails3中AJAX和jQuery

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

如何做到這一點在Rails3中使用jQuery。那麼我怎樣才能用Rails3中的ajax調用(link_to:remote => true)替換我的div的html。

我試過某事像(在我show_rec_horses.js.erb):

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

並沒有任何反應。我嘗試了一些其他的變化,但沒有工作。什麼做錯了?這應該以其他方式接近嗎?任何答案將不勝感激。

回答

26

好吧,讓我們從控制器開始。

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 

這將確保爲html請求或javascript請求呈現正確的模板。如果您只需要迴應javascript請求,請刪除html部分。

現在讓我們假設你有一個包含以下內容的頁面:

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

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

點擊鏈接將在你的控制器show_rec_horses行動的請求,這一行動將使javascript文件show_rec_horses.js.erb

這個JavaScript文件應包含這樣的事情:

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

現在您的容器將被填充的horses/_reccommended.html.erb的內容,這對於例如可能包含:

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

謝謝,這真是幫了我。 – Narayana 2013-06-07 07:17:27

+1

遠遠超出....這比我懷疑的更容易!非常感謝! – 2013-09-05 09:36:34

+0

直到我刪除「respond_to do | format |」之後才工作塊 – 2013-11-29 00:27:28