Rails 4.2.0 app:删除链接javascript停止工作

时间:2016-08-19 20:32:51

标签: javascript jquery ruby-on-rails destroy confirm

我有一个已经运行了几个月的Rails 4.2.0应用程序。

该应用使用"删除"在各个地方都有link_to标签。作为方法并带有确认提示。这些工作正常,在删除之前弹出警报以确认,并按预期将请求路由到控制器中的destroy操作。

今天有一位应用用户问我为什么删除链接不起作用。没有显示确认警报,结果请求是一个简单的GET,它被路由到show动作而不是destroy。虽然我的用户不经常删除,但我确信他们最初是在工作。

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

神秘的部分是我几个月来主要进行代码和数据库更改;我不记得上次添加gem或运行bundle install或update时。显然必须改变一些东西才能打破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)

的application.js:

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

app / views / layouts / 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>

关于可能发生的事情的任何想法?

1 个答案:

答案 0 :(得分:0)

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

我打算完全删除这个问题,但后来我发现有人可能会因为看到我追踪问题的方式而受益。

首先,我记得上次与宝石相关的更改是向应用添加自动填充字段。所以我拿出了一行

//= require jquery-ui/autocomplete
来自application.js的

。 Etvoilà!删除链接重新开始工作。

当我注意到删除该行实际上是在我的javascript初始化自动完成字段的时候抛出异常时,我正要自言自语地指责jquery-ui与Rails javascript不兼容。这听起来很可疑,就像我的应用程序的javascript中的某些内容干扰了链接javascript,这个异常偶然会阻止执行。

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

问题本身是我的所有删除链接都包含在表中,而我最近添加了单击处理程序来对行进行排序。我对该表的单击处理程序停止了对click事件的传播,这阻止了删除链接的Rails处理程序启动。我还没有完成修复,但它可能涉及更仔细地定位排序事件处理程序所以删除链接不受影响。