如果我想在rails中创建DELETE链接,我会编写以下代码(在此示例中为删除Devise中的用户会话):
<%= link_to('Logout', destroy_user_session_path, :method => :delete) %>
这将变成以下HTML:
<a rel="nofollow" data-method="delete" href="/users/sign_out">Logout</a>
效果很好,除了我不能简单地将HTML放入静态HTML页面。它只会做一个GET请求。我假设Rails包含一些标准的Javascript来将上面的链接转换为实际执行DELETE请求的链接。那么在静态HTML页面上链接到执行DELETE操作的Rails资源的正确方法是什么?我应该找到并抓住Javascript Rails包含在所有这样做的网页中吗?还有更好的方法吗?
答案 0 :(得分:6)
不幸的是,您无法发送带有锚链接的DELETE
请求 - 传统的锚链接只会发送GET
请求。实际上,你根本无法发送真正的DELETE
请求。如果你想创建一个没有javascript的删除链接,解决方案相当容易。查看 2.4如何使用PUT或DELETE方法工作?在official documentation中。基本上,您只需创建一个提交到资源网址的表单,方法为delete
。这很简单,你不需要依靠javascript来完成工作。希望这有帮助,祝你好运。
答案 1 :(得分:3)
Rails使用JavaScript来处理delete
个链接。
它会创建一个不可见的表单,并在您点击data-method
属性为"delete"
查看https://github.com/rails/jquery-ujs/blob/master/src/rails.js
中的handleMethod
当您包含rails.js
时(如果您使用的是jQuery),静态页面中的删除链接可能会正常工作。
如果没有,您可以自己在handleMethod
中构建表单。
答案 2 :(得分:3)
由于我的一些同事正在使用本机应用,用户可能没有在其浏览器上启用JavaScript,在这种情况下,删除链接将无法正常工作,我们将获得显示页面而不是删除... 。因此,如果您不确定用户是否可以在其浏览器上启用或不启用JS,您可以始终使用GET或POST方法生成路由到控制器的删除操作...这种方法适用于静态HTML页面也.. ..