我正在通过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