铁杆新手。正在研究railsTutorial的第2章。
我与仅使用基于文本的浏览器w3m的人进行结对编程。因此,一旦我们创建了用户资源,我们就创建了一个新用户并尝试删除它但不能。我可以在我的Chrome浏览器上执行此操作,因此认为这可能是JS左右的问题。
我们如何解决这个问题?
答案 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接口; 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
等。)
答案 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