如何使用“DELETE”HTTP动词发送请求?

时间:2009-02-07 14:26:43

标签: ruby-on-rails rest routing

我想在Rails应用程序中的视图中创建一个链接来执行此操作...

DELETE /sessions

我该怎么做。

添加了并发症:

“session”资源没有模型,因为它代表用户登录会话。 CREATE表示用户登录,DESTROY表示注销。

这就是为什么URI中没有ID参数。

我正在尝试在用户界面中实现“退出”链接。

4 个答案:

答案 0 :(得分:18)

正确,浏览器实际上不支持发送删除请求。许多Web框架的公认惯例是将_method参数设置为'DELETE',并使用POST请求。

这是Rails中的一个例子:

<%= link_to 'log out', session_path, :method => :delete %>

您可能需要查看Restful Authentication

答案 1 :(得分:4)

我并不特别了解Rails,但我经常构建使用Javascript发送DELETE(和PUT)请求的网页。我只是使用XmlHttpRequest对象来发送请求。

例如,如果你使用jQuery:

有一个如下所示的链接:

<a class="delete" href="/path/to/my/resource">delete</a>

运行此Javascript:

$(function(){
    $('a.delete').click(function(){
        $.ajax(
            {
                url: this.getAttribute('href'),
                type: 'DELETE',
                async: false,
                complete: function(response, status) {
                    if (status == 'success')
                        alert('success!')
                    else
                        alert('Error: the service responded with: ' + response.status + '\n' + response.responseText)
                }
            }
        )
        return false
    })
})

我主要是从记忆中写下这个例子,但我很确定它会起作用....

答案 2 :(得分:1)

如果我错了,请纠正我,但我相信你只能用浏览器发送POST和GET请求(用HTML格式)。

答案 3 :(得分:1)

Rails内置的链接方法将生成如下内容:

<a href="/sessions?method=delete" rel="nofollow">Logout</a>

如果您不想使用Rails的内置方法(即不希望rel="nofollow",这会阻止搜索引擎抓取工具跟踪链接),您也可以手动编写链接并添加data-method属性,如下所示:

<a href="/sessions" data-method="delete">Logout</a>

浏览器只能发送GET / POST请求,因此这会向您的Rails服务器发送正常的GET请求。 Rails将解释并将其作为DESTROY / DELETE请求进行路由,并调用相应的操作。