【问题标题】:Rails 4.2.0 app: delete link javascript stopped workingRails 4.2.0 应用程序:删除链接 javascript 停止工作
【发布时间】:2016-12-27 02:21:41
【问题描述】:

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

应用程序在不同的地方都有link_to标签,使用“删除”作为方法并带有确认提示。这些一直正常工作,在删除之前弹出警报以确认,并且请求按预期路由到控制器中的销毁操作。

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

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

神秘的部分是我几个月来主要是在做代码和数据库的更改;我不记得上次添加 gem 或运行 bundle install 或 update 是什么时候了。显然,必须改变某些东西才能破坏 javascript,但我想不出它会是什么。

到目前为止,我已经删除了 Rails jQuery 并从 Google API 链接到一个。我已经删除了 Turbolinks。我已将 jquery-rails gem 从 v. 4.0.3 更新到 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>

对可能发生的事情有任何想法吗?

【问题讨论】:

  • 您正在使用哪个操作系统?如果是 Windows,请尝试 gem 'coffee-script-source', '1.8.0'
  • 我在 Mac OS X 10.11(开发,使用 WEBrick 服务器)或 CentOS 7(生产,使用 Apache 和Passenger Phusion)上运行该应用程序。

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


【解决方案1】:

嗯,我发现了问题所在(他就是我自己!)。

我本来打算非常羞愧地删除这个问题,但后来我想有人可能会从我追踪问题的方式中受益。

首先,我记得最后一个与 gem 相关的更改是向应用程序添加一个自动完成字段。所以我把线拿出来了

//= require jquery-ui/autocomplete

来自 application.js。瞧!删除链接又开始起作用了。

当我注意到删除该行实际上是在我的 javascript 初始化自动完成字段时引发异常时,我正要自以为是地指责 jquery-ui 与 Rails javascript 不兼容。这听起来很可疑,就像我的应用程序的 javascript 中的某些东西干扰了链接 javascript,巧合的是,该异常阻止了该链接被执行。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-31
    • 1970-01-01
    相关资源
    最近更新 更多