2016-08-19 71 views
0

我有一个Rails 4.2.0应用程序已经运行了好几个月了。Rails 4.2.0应用程序:删除链接javascript停止工作

该应用程序在各个地方使用“删除”作为方法和确认提示link_to标记。这些工作正常,警报弹出,在删除之前确认,请求按照预期路由到控制器中的销毁操作。

今天一个应用程序用户问我为什么删除链接不起作用。没有显示确认提醒,并且生成的请求是一个简单的GET,它被路由到show动作而不是销毁。虽然我的用户不会经常删除,但我确信他们原本是在工作。

删除链接不再适用于开发环境或现场环境。在加载包含链接的页面或单击删除链接时,浏览器控制台中没有javascript错误。 Chrome,Firefox和Safari的行为相同。

神秘的部分是,我一直在做主要的代码和数据库变化几个月;我记不起最后一次添加gem或运行包安装或更新。显然,必须改变以打破JavaScript,但我想不出它会是什么。

到目前为止,我已经删除了rails jQuery并链接到Google API中的一个。我已经移除了Turbolinks。我已将v.4.0.3中的jquery-rails gem更新为4.2.1。没有运气。

如果任何人都可以提出一些测试或看看,这里是从我的配置和代码的一些摘录(恢复上述尝试失败后):

Gemfile.lock的:

jquery-rails (4.0.3) 
jquery-turbolinks (2.1.0) 
jquery-ui-rails (5.0.3) 

应用的.js:

//= require jquery 
//= require jquery.turbolinks 
//= require jquery_ujs 
//= require turbolinks 
//= require jquery-ui/datepicker 
//= require jquery-ui/autocomplete 
//= require_tree . 

应用/视图/布局/ application.html.erb,在标签内:

<%= javascript_include_tag 'application', 'data-turbolinks-track' => true %> 

删除链接的标签是这样的:

<%= link_to 'Delete', item_order_path(@item, order), method: :delete, data: { confirm: 'Are you sure?' }, class: :button %> 

在他们看起来像这样渲染HTML:

<a data-confirm="Are you sure?" class="button" rel="nofollow" data-method="delete" href="/items/1/orders/1">Delete</a> 

什么可以去上的任何想法?

+0

你正在使用哪个操作系统?如果是Windows,请尝试gem'coffee-script-source','1.8.0' –

+0

我正在Mac OS X 10.11(开发,使用WEBrick服务器)或CentOS 7(生产,使用Apache和Passenger的Phusion)。 – EK0

回答

0

嗯,我发现问题是什么(他是我自己!)。

我打算彻底删除这个问题,但后来我发现有人可能会从查看问题的方式中受益。

首先,我想起了最后一个与宝石相关的变化是为应用程序添加了一个自动填充字段。所以我拿出这行

//= require jquery-ui/autocomplete 

from application.js。 Etvoilà!删除链接重新开始工作。

我正要自责地指责jquery-ui与Rails javascript不兼容,当我注意到删除该行实际上是在我的javascript正在初始化自动填充字段时抛出一个异常。这听起来很像我的应用程序的JavaScript中的某些内容干扰了链接javascript,这个异常巧合地阻止了被执行。

所以我恢复了application.js文件并重命名了所有的javascript资源,以便服务器不会识别它们。删除链接现在再次运行。然后,我逐一恢复了每个JavaScript文件,在页面刷新后测试链接。重新引入一个文件后,最终删除链接停止工作:该文件是最近的更改。

问题本身就是我所有的删除链接都包含在表格中,并且我最近添加了点击处理程序来对这些表格进行排序。我的表单处理程序在click事件中停止传播,这阻止了Rails处理程序的删除链接踢入。我还没有找到修复程序,但它可能会更仔细地针对排序事件处理程序删除链接不受影响。