shallow rails examples concern ruby-on-rails rest routing

ruby on rails - rails - ¿Cómo se envía una solicitud con el verbo HTTP "DELETE"?



routes rails examples (4)

Corrígeme si me equivoco, pero creo que solo puedes enviar solicitudes POST y GET con un navegador (en HTML).

Me gustaría crear un enlace en una vista dentro de una aplicación de Rails que hace esto ...

DELETE /sessions

Como podría hacerlo.

Complicación agregada:

El recurso "sesión" no tiene ningún modelo porque representa una sesión de inicio de sesión de usuario. CREATE significa que el usuario inicia sesión, DESTROY significa DESTROY sesión.

Es por eso que no hay ID param en el URI.

Estoy tratando de implementar un enlace "cerrar sesión" en la interfaz de usuario.


Correcto, los navegadores en realidad no admiten el envío de solicitudes de eliminación. La convención aceptada de muchos frameworks web es enviar un parámetro _method establecido a ''DELETE'', y usar una solicitud POST.

Aquí hay un ejemplo en Rails:

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

Es posible que desee echarle un vistazo a la Autenticación reposada .


No sé específicamente sobre Rails, pero con frecuencia construyo páginas web que envían solicitudes DELETE (y PUT), usando Javascript. Solo uso objetos XmlHttpRequest para enviar la solicitud.

Por ejemplo, si usa jQuery:

tener un enlace que se ve así:

<a class="delete" href="/path/to/my/resource">delete</a>

Y ejecuta este 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 }) })

Escribí este ejemplo principalmente de memoria, pero estoy bastante seguro de que funcionará ...


El método integrado de Rails para los enlaces generará algo como esto:

<a href="/sessions?method=delete" rel="nofollow">Logout</a>

Si no desea utilizar el método integrado de los Rails (es decir, no desea el rel="nofollow" , que impide que los rastreadores del motor de búsqueda sigan el enlace), también puede escribir el enlace manualmente y agregar los data-method atributo de data-method , como ese:

<a href="/sessions" data-method="delete">Logout</a>

Los navegadores solo pueden enviar solicitudes GET / POST, por lo que enviará una solicitud GET normal a su servidor Rails. Rails interpretará y enrutará esto como una solicitud DESTROY / DELETE, y llama a la acción apropiada.