2011-06-02 57 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编码的字符添加到文件的开头,而这可能是其中那些从...