如何建立到rails资源的DELETE链接?

时间:2012-11-03 04:02:23

标签: ruby-on-rails ruby-on-rails-3 http http-headers ruby-on-rails-3.2

如果我想在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包含在所有这样做的网页中吗?还有更好的方法吗?

3 个答案:

答案 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页面也.. ..