2009-02-07 94 views
5

我想创建一个Rails应用程序,这是否内视图中的一个链接...如何用“DELETE”HTTP动词发送请求?

DELETE /sessions 

我该怎么做。

增加了复杂性:

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

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

我试图在UI中实现“注销”链接。

回答

18

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

下面是Rails的一个例子:

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

你可能想看看Restful Authentication

1

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

+1

正确;不过,您可以使用JavaScript发送带有任意动词的请求。 – 2009-02-07 14:40:42

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 
    }) 
}) 

我多写从内存这个例子,但我很确定它会工作....

1

Rails的内置链接方法将生成e是这样的:

<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请求,并调用相应的操作。