我想在Rails应用程序中的视图中创建一个链接来执行此操作...
DELETE /sessions
我该怎么做。
添加了并发症:
“session”资源没有模型,因为它代表用户登录会话。 CREATE
表示用户登录,DESTROY
表示注销。
这就是为什么URI中没有ID参数。
我正在尝试在用户界面中实现“退出”链接。
答案 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请求进行路由,并调用相应的操作。