铁轨新手。正在研究railsTutorial的第 2 章。
我与只使用基于文本的浏览器w3m的人结对编程。因此,一旦我们创建了用户资源,我们就创建了一个新用户并尝试删除它但不能。不过我可以在我的 Chrome 浏览器上做到这一点,所以认为这可能是 JS 的问题。
我们如何解决这个问题?
铁轨新手。正在研究railsTutorial的第 2 章。
我与只使用基于文本的浏览器w3m的人结对编程。因此,一旦我们创建了用户资源,我们就创建了一个新用户并尝试删除它但不能。不过我可以在我的 Chrome 浏览器上做到这一点,所以认为这可能是 JS 的问题。
我们如何解决这个问题?
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 方法集(DELETE
、PUT
、PATCH
等)。
如果您不想Turbolinks
与 Rails(4) 应用程序一起使用,这很容易!只需这样做:
gem 'turbolinks'
您的Gemfile
//=require turbolinks
您的app/assets/javascripts/application.js
"data-turbolinks-track" => true
您的app/views/layouts/application.html.erb