2012-09-23 168 views
2
一個實例變量動態更新頁面

更新:我的問題得到回答,但我寫了一篇博客文章正是細節我如何着手這樣做:http://lathamcity.com/posts/ajaxInRails.html基於從阿賈克斯

我有一個頁面,顯示的東西的清單基於Ruby對象。我的目標是創建一個Ajax調用來獲得一個新的Ruby對象,然後基於此更新列表。

我認爲這樣做,這是用諧音。我使用代碼中的Rails實例變量使整個列表成爲部分文件。然後我希望Ajax調用將相應的實例變量設置爲新列表並重新渲染部分。

這是最終目標,但現在我想做的是,我只是設置一個實例變量爲一個字符串一個很基本的版本,然後顯示的字符串。

所以在我的div,我有:

<% form_tag :action => :go , :method => :get, :remote => true do %> 
    <%= submit_tag "Go" %> 
<% end %> 

<div id="test"><%= render(:partial => 'test') %></div> 

有一個在views/interface文件夾(在我的控制器的名稱)一個_test.erb文件,只有下面一行的內容:

<%= @test %> 

然後在我的控制器,

def go 
    @test = "Hello You" 
    render :update do |page| 
     page.replace_html "test", :partial => "test" 
    end 
end 

當我跑,我得到:Missing template interface/update, application/update

我不知道很多關於render :update,我發現它在谷歌上的例子。

我在做什麼錯,是造成這個問題,我該如何解決?我是以正確的方式去做這件事還是有更好的方法來做到這一點?

回答

5

我認爲無論render :updatereplace_html被棄用/中軌3.1去除。部分更新的標準方法是使用js.erb模板。

在你的控制器,告訴你的行動,以JS請求作出迴應:

@test = "Hello you" 
respond_to do |format| 
    format.js 
end 

創建JS響應模板的應用程序/視圖/接口/ go.js.erb:

$('#test').html("<%= escape_javascript(render('test', test: @test})) %>") 

和變化部分代碼爲<%= test %>,因爲這不再是實例變量;相反,測試被傳遞到部分從js.erb模板的參數與test: @test