1

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

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

我们如何解决这个问题?

4

2 回答 2

1

Rails 依赖于 javascript 链接到 httpDELETE操作。

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

生成带有data-method属性的链接。然后,Rails UJS 驱动程序会捕获单击并将其转换为 AJAX HTTPDELETE请求。

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

添加:

我们这样做的全部原因是 Rails 是围绕使用各种 HTTP 方法的 restful 接口构建的;GET, POST, DELETE, PUT, PATCH. 但是有些浏览器只能发送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等)。

于 2015-04-30T14:13:38.390 回答
0

如果您不想Turbolinks与 Rails(4) 应用程序一起使用,这很容易!只需这样做:

  • gem 'turbolinks'您的Gemfile
  • //=require turbolinks您的app/assets/javascripts/application.js
  • "data-turbolinks-track" => true您的app/views/layouts/application.html.erb
于 2015-04-30T14:13:29.647 回答