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

时间:2015-04-30 14:03:12

标签: ruby-on-rails w3m

铁杆新手。正在研究railsTutorial的第2章。

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

我们如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

Rails依赖于javascript来获取http DELETE操作的链接。

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

生成具有data-method属性的链接。然后,Rails UJS driver会抓住点击并将其转换为AJAX HTTP DELETE请求。

  HTTP动词的

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

加了:

我们这样做的全部原因是Rails是使用全方位HTTP方法构建的restful接口; GETPOSTDELETEPUTPATCH。但有些浏览器只能发送GET& POST个请求和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等。)

答案 1 :(得分:0)

如果你不想在你的Rails(4)应用程序中使用Turbolinks,那很简单!就这样做:

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