【问题标题】:Is it possible to disable JS in RoR project?是否可以在 RoR 项目中禁用 JS?
【发布时间】:2015-07-10 06:47:37
【问题描述】:

Rails 新手。正在编写railsTutorial 的第 2 章。

我正在与只使用基于文本的浏览器w3m 的人结对编程。因此,一旦我们创建了用户资源,我们就创建了一个新用户并尝试删除它但不能。不过我可以在我的 Chrome 浏览器上完成,所以认为这可能是 JS 的问题。

我们如何解决这个问题?

【问题讨论】:

标签: ruby-on-rails w3m


【解决方案1】:

Rails 依赖 javascript 链接到 http DELETE 操作。

link_to "Delete Thing", thing_path(@thing), method: :delete  

生成带有data-method 属性的链接。 Rails UJS driver 然后捕获点击并将其转换为 AJAX HTTP DELETE 请求。

method: HTTP 动词的符号 - 此修饰符将动态创建一个 HTML 表单并立即使用 指定的 HTTP 动词。对于让链接执行 POST 操作很有用 在删除记录等危险操作中(搜索机器人可以 在爬取您的网站时跟随)。支持的动词是 :post, :delete, :patch 和 :put。请注意,如果用户禁用了 JavaScript,则 请求将回退到使用 GET。如果使用 href: '#' 并且用户 已禁用 JavaScript 单击链接将无效。如果你 依赖于 POST 行为,你应该在你的 通过使用请求对象的 post 方法来执行控制器的操作? 删除?、补丁?或放置?。 http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

补充:

我们这样做的全部原因是 Rails 是围绕使用各种 HTTP 方法的 restful 接口构建的; GETPOSTDELETEPUTPATCH。但是有些浏览器只能发送GETPOST 请求,并且HTML 没有定义执行GET 之外的其他操作的链接。

如果不需要 javascript,您可以创建一个表单来发送 GET 以外的请求:

<%= form_for @thing, method: :delete do |f| %>
   <%= f.submit 'Delete thing' %>
<% end %>

请注意,此表单使用method="post" 是为了兼容。 Rails 为生成的表单添加了一个特殊的隐藏输入:

<input name="_method" type="hidden" value="delete" />

Rails 用来伪造扩展的 HTTP 方法集(DELETEPUTPATCH 等)。

【讨论】:

  • 谢谢。将对此进行调查。我知道同一行代码会导致这种情况。
  • 添加了关于如何创建不使用 javascript 的删除按钮的说明。
【解决方案2】:

如果您不想在 Rails(4) 应用程序中使用 Turbolinks,这很简单!只需这样做:

  • 从您的Gemfile 中删除gem 'turbolinks'
  • 从您的app/assets/javascripts/application.js 中删除//=require turbolinks
  • 删除两个"data-turbolinks-track" =&gt; true哈希键/值对 来自您的app/views/layouts/application.html.erb

【讨论】:

  • 一旦我这样做了,破坏会通过吗?
  • 是的,所有链接都可以正常工作。确保重新启动服务器和浏览器
  • 投反对票。 Turbolinks 与您处理删除请求的问题无关。 Rails UJS 驱动程序 (jquery-rails) 完全独立于 Turbolinks,Turbolinks 只是通过部分替换来加速浏览。 github.com/rails/turbolinks
猜你喜欢
  • 2012-05-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多