标准删除链接不适用于Rails 3 + JQuery UJS

时间:2010-12-15 18:16:41

标签: jquery ruby-on-rails-3 ujs

我正在使用JQuery 1.4.4和jQuery UJS rails.js(https://github.com/rails/jquery-ujs

制作Ruby On Rails 3.0.3应用程序

我有脚手架生成的模型/视图/控制器 - 文档,我在app / views / documents / index.html.haml文件中删除链接:

link_to "delete", document, :confirm => "Are you sure?", :method => :delete

这会生成此HTML:

<a href="/documents/1" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a>

这似乎很好。

当我点击此“销毁”链接时,我会看到浏览器 confirm(),当我点击取消时,我希望什么都不会发生。

BUT

删除功能并删除文档。

是否存在相同问题或我做错了什么?

目前我已经挖掘了这一点:

我查看了jquery-ujs rails.js,并且有两个 .live()事件附加到同一个锚点:

1)$('a [data-confirm],输入[data-confirm]')。live('click',function(){...}

2)$('a [data-method]:not([data-remote])')。live('click',function(e){...}

第一次live()执行 return false; 据我所知应该制动所有执行链,但事实并非如此。第二个 live()仍然执行,第二个 live()是生成表单并提交给destroy动作的地方。

5 个答案:

答案 0 :(得分:6)

升级到最新的rails.js(对于jQuery)将解决问题。

https://github.com/rails/jquery-ujs/raw/master/src/rails.js

答案 1 :(得分:2)

您还应该确保链接到rails.js是在您的jquery链接之后。我有&lt;%= javascript_include_tags“rails”,“jquery”....%&gt;并且它需要最终的轨道。 rails.js使用jquery创建的许多函数,因此需要在调用rails之前对它们进行初始化,以便可以使用它们。

答案 2 :(得分:1)

我还不能投票,但我的问题和大卫的问题一样。 确保rails.js在您的jquery链接之后出现。那个以及你在application.html.erb文件中有CSRF标记也是这样的:

application.html.erb

  <head>
<title><%= title %></title>
<%= render 'layouts/stylesheets' %>
<script src="http://jquery.com/src/jquery-latest.js"></script>
<%= javascript_include_tag :defaults %>
<%= javascript_include_tag :all %>
<%= csrf_meta_tag %>

有关CSRF的更多信息,请点击此处: http://www.themodestrubyist.com/2010/02/24/rails-3-ujs-and-csrf-meta-tags/

答案 3 :(得分:0)

我有类似的错误。

首先,您需要使用button_to来获取删除所需的POST操作。

其次,您需要确保jquery-ujs(https://github.com/rails/jquery-ujs/raw/master/src/rails.js)所需的jquery版本是您正在使用的版本。最新版本的jquery-ujs需要jquery-1.6.0或更高版本。我使用的是旧版本。

答案 4 :(得分:0)

当使用Javascript为删除链接生成HTML时,除了data-method =“delete”之外,不要忘记data-remote =“true”属性