2011-03-02 210 views
18

我正在尝试开发一个RESTful Sinatra应用程序。现在,我知道如何回应与删除请求类似从Sinatra发送DELETE请求

delete '/user/:id' do |id| 
    #do something in the model 
end 

我感兴趣的是如何得到执行该方法。我不能有一个DELETE而不是GET的链接,我可以吗?

我发现迄今是通过jQuery发送DELETE请求,唯一的解决办法:How to send a PUT/DELETE request in jQuery?

我试图寻找到不同的RESTful西纳特拉项目在GitHub上,但我的红宝石的知识可能是限于获得他们是如何做的。

回答

24

认沽按照你的代码行。

use Rack::MethodOverride 

它会帮助你解释方法后与参数“_method”与价值“delete”为put操作。 然后,你可以写

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

事实上,我这是必要的,如果他使用的是模块化应用程序。 Sinatra Classy应用程序默认获取此设置。 – include 2011-09-16 14:48:49

+1

对于Sinatra模块化风格,您可以将其添加到从Sinatra :: Base继承的应用程序类中,而不是“使用Rack :: MethodOverride”:“set:method_override,true” – 2014-11-17 10:25:57

14

我认为这就像Rails的方式。你需要用'删除'值定义一个参数'_method',并将它添加到你的表单中。

当你用这个特殊的参数进行POST时,你在sinatra中做了一个DELETE请求。

像:

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

这是一个与PUT方法相同

5

另一种方法是卷曲使用:

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

您也可以触发删除路径的一个按钮,像这样