我正在通過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但有麻煩解釋它。我不確定頁面前面的奇怪符號。
編輯:我還發現,如果我點擊按鈕之前和之後查看源代碼,該按鈕確實刷新了代碼並添加了所需的項目。這個問題似乎只是試圖刷新局部。
任何幫助表示讚賞。謝謝!
未來這個問題本身通過魔術看似解決。我檢查了Pragmatic Programmer論壇的解決方案,並且有人建議他們需要重新啓動服務器。無論出於何種原因,這都有效,AJAX腳本現在按預期運行。 – 2011-06-03 01:12:20