Rails 3.2.x remote => true仍然重新加载页面

时间:2012-05-10 10:31:19

标签: ruby-on-rails ajax

我一直在搜索,无法弄清楚为什么这不起作用。

我正在尝试测试一个非常基本的ajax动作。这是我的代码:

控制器:

def commit
    respond_to do |format|
        format.html { redirect_to :action => "index" } # see note 1
        format.js { render :layout => false } # see note 2
        format.js { render :nothing => true } 
    end
end

查看:

<%= link_to "commit", :action => "commit", :remote => true %>
<%= form_tag( :action => "commit", :remote => true, :method => :post) do %>
     <%= submit_tag "commit" %>
<% end %>

<div id='message'></div>

commit.js.erb

console.log('committed');
$('#message').html("committed"); 

问题是我要使用commit方法,但页面会重新加载,这会使remote =&gt; true失败 也似乎没有调用commit.js。

注1:如果我排除了这一行,我将空白页面提交给/ commit。包括它使页面只是重新加载
注2:我尝试过其他SO帖子建议的这两种方法 注3:我尝试过使用link_to和form_tag

有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:4)

你为什么要放2条线?

    format.js { render :layout => false } # see note 2
    format.js { render :nothing => true } 

删除第二个!

替换:

<%= link_to "commit", :action => "commit", :remote => true %>

使用:

<%= link_to "commit", commit_path, :remote => true %>

<小时/> 形式相同:

制作你的:

<%= form_tag( :action => "commit", :remote => true, :method => :post) do %>

为:

<%= form_tag(commit_path, :remote => true) do %>

注意:POST是默认行为,您可以在form_tag中省略它。