2011-03-02 24 views
18

Estoy tratando de desarrollar una aplicación RESTful Sinatra. Ahora, sé cómo responder a una petición de supresión con algo comoEnviando una solicitud DELETE de Sinatra

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

Lo que me interesa es cómo consigo a ejecutar ese método. No puedo tener el enlace que hace un DELETE en lugar de un GET, ¿o sí?

La única solución que encontré hasta ahora es el envío de una solicitud DELETE a través de jQuery: How to send a PUT/DELETE request in jQuery?

He intentado buscar en diferentes proyectos REST Sinatra en github pero mi conocimiento de Ruby es, probablemente, a limitarse a conseguir la forma en que lo están haciendo.

Respuesta

24

Put siguiente línea en su código.

use Rack::MethodOverride 

Se le ayudará a interpretar los métodos de correos con el parámetro "_method" con el valor "delete" que se plantean. A continuación, puede escribir

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

de hecho, esto es necesario si él está usando una aplicación Modular. Las aplicaciones Sinatra Classy obtienen este conjunto por defecto. – include

+1

Para el estilo modular de Sinatra, en lugar de "usar Rack :: MethodOverride" puede agregar esto a su clase de aplicación que hereda de Sinatra :: Base: "set: method_override, true" –

14

Creo que es como el camino de Rails. Debe definir un parámetro '_method' con el valor 'eliminar' y agregarlo en su formulario.

Cuando PUBLICA con estos params en particular, usted hace una solicitud DELETE en sinatra.

igual:

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

Es lo mismo con el método PUT

5

Otra forma es utilizar 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'} 

También puede activar la ruta de borrado con un botón de modo

Cuestiones relacionadas