从Sinatra发送DELETE请求

20

我正在尝试开发一个RESTful Sinatra应用程序。现在,我知道如何响应类似于删除请求的内容。

delete '/user/:id' do |id|
   #do something in the model
end
我感兴趣的是如何执行该方法。我不能有一个执行DELETE而不是GET的链接,对吗?
到目前为止,我找到的唯一解决方案是通过jQuery发送一个DELETE请求:如何使用jQuery发送PUT / DELETE请求? 我尝试查看GitHub上不同的RESTful Sinatra项目,但我的Ruby知识可能太有限了,以至于无法理解他们是如何做到的。
5个回答

28
在你的代码中添加以下行。
use Rack::MethodOverride

这将帮助你将具有参数 "_method" 且值为 "delete" 的 POST 方法解释为 PUT 方法。

然后你可以编写:

delete '/user/:id' do |id|

5
事实上,如果他正在使用模块化应用程序,那么我认为这是必要的。Sinatra的Classy应用程序默认会设置这个。 - include
2
对于Sinatra模块化风格,你可以在继承自Sinatra::Base的应用程序类中添加以下代码来替代"use Rack::MethodOverride": "set :method_override, true" - Ronny Ager-Wick

16

我认为这类似于Rails的方式。您需要定义一个名为“_method”的参数,其值为“delete”,并将其添加到表单中。

当您使用这个特殊的参数提交表单时,在sinatra中会执行一个DELETE请求。

例如:

<form action="/search" method="post">
  <div style="margin:0;padding:0">
    <input name="_method" type="hidden" value="delete" />
  </div>
</form>

PUT方法也是一样的。


为什么要提到任何参考资料? - CalamityAdam

4

另一种方法是使用Curl:

curl -X DELETE http://host/user/1

0
  %form{:action => "/note/delete/#{@note.id}", :method => "post"}
    %input{:type => 'submit', :name=> "_method", :value => 'delete', :class => 'button'}

你也可以使用按钮来触发删除路由,方法如下:


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接