2011-06-02 94 views
1

我正在通過Rails第4版進行敏捷Web開發,並進行了一些調整(主要是命名變體),並且我已經到達了迭代F2。在這個迭代中,您可以使用以下方法修改索引按鈕:remote => true,將format.js添加到控制器的respond_to部分,並生成js.rjs文件以執行AJAX呈現。或者至少這是我對它的解釋。這些步驟的目標是在添加新訂單項(在此情況下爲成員)時使用AJAX在側邊欄更新中添加購物車(在本例中爲團隊)基本Ruby on Rails AJAX錯誤

在我的情況下,我試圖添加團隊成員。她的一些代碼片段,我說:

index.html.erb:

<%= button_to 'Add to Team', members_path(:player_id => player), 
    :remote => true %> 

members_controller:

def create 
    @team = current_team 
    player = Player.find(params[:player_id]) 
    @member = @team.add_player(player.id) 

    respond_to do |format| 
     if @member.save 
     format.html { redirect_to(nba_url) } 
     format.js 
     format.xml { render :xml => @member, 
      :status => :created, :location => @member } 
     else 
     format.html { render :action => "new" } 
     format.xml { render :xml => @member.errors, 
      :status => :unprocessable_entity } 
     end 
    end 
end 

create.js.rjs:

page.replace_html('team', render(@team)) 

頁能夠渲染,而且我仍然可以單擊按鈕將成員添加到團隊中。但是,AJAX不起作用。當我重新加載時,我仍然可以看到成員已添加到邊欄中。所有其他團隊的功能仍然存在,因爲我可以清空團隊並添加任何我希望的成員。當我檢查服務器日誌,我發現了以下錯誤:

錯誤:在此基礎上

ActionView::Template::Error (undefined local variable or method `page' for #< 
#<Class:0x413e1b8>:0x413cb20>): 
    1: page.replace_html('team', render(@team)) 
    app/views/members/create.js.rjs:1:in `block in _app_views_members_create_js_rj 
s___908569197_34199712_807066544' 
    app/views/members/create.js.rjs:1:in `_app_views_members_create_js_rjs___90856 
9197_34199712_807066544' 
    app/controllers/members_controller.rb:47:in `create' 

現在看來似乎已經找到了create.js.rjs但有麻煩解釋它。我不確定頁面前面的奇怪符號。

編輯:我還發現,如果我點擊按鈕之前和之後查看源代碼,該按鈕確實刷新了代碼並添加了所需的項目。這個問題似乎只是試圖刷新局部。

任何幫助表示讚賞。謝謝!

+0

未來這個問題本身通過魔術看似解決。我檢查了Pragmatic Programmer論壇的解決方案,並且有人建議他們需要重新啓動服務器。無論出於何種原因,這都有效,AJAX腳本現在按預期運行。 – 2011-06-03 01:12:20

回答

2

看起來你的rjs文件在開始時有一些無效位。也許嘗試重新創建文件?

+0

重新創建文件並重新啓動我的導軌服務器解決了問題。謝謝! – 2011-06-23 03:56:54

0

你期望用render(@team)做什麼?

我看了一下action view's method "render"並沒有找到你期待它的功能。也許還有另一種功能,你知道,我不知道。

您還可以使用ERB而不是RJS,使用它就像一個視圖

+0

基本上,該命令的目標是用id'team'替換頁面上的元素,並將其替換爲呈現的部分'team'。我已經看到了使用js.erb的一些解決方法,但它是一個不同的實現,我想弄清楚問題在這裏。 – 2011-06-03 01:01:12

0

隨着伯特Goethal的答案的線條,是你的編輯保存文本文件作爲UTF-8 BOM?

一個BOM將兩個Unicode編碼的字符添加到文件的開頭,而這可能是其中那些從...