是否可以在 RoR 项目中禁用 JS?

Is it possible to disable JS in RoR project?

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

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

我们如何解决这个问题?

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

  • Gemfile
  • 中删除 gem 'turbolinks'
  • 从您的 app/assets/javascripts/application.js
  • 中删除 //=require turbolinks
  • 删除两个 "data-turbolinks-track" => true 散列 key/value 对 来自你的app/views/layouts/application.html.erb

Rails 依赖 javascript 进行 link 到 http DELETE 操作。

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

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

method: symbol of HTTP verb - This modifier will dynamically create an HTML form and immediately submit the form for processing using the HTTP verb specified. Useful for having links perform a POST operation in dangerous actions like deleting a record (which search bots can follow while spidering your site). Supported verbs are :post, :delete, :patch, and :put. Note that if the user has JavaScript disabled, the request will fall back to using GET. If href: '#' is used and the user has JavaScript disabled clicking the link will have no effect. If you are relying on the POST behavior, you should check for it in your controller's action by using the request object's methods for post?, delete?, patch?, or put?. http://api.rubyonrails.org/classes/ActionView/Helpers/UrlHelper.html#method-i-link_to

已添加:

我们这样做的全部原因是 Rails 是围绕 restful 接口构建的,使用了所有 HTTP 方法; GETPOSTDELETEPUTPATCH。但是有些浏览器只能发送 GETPOST 请求并且 HTML 没有定义 links 执行除 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 等)。