Eliminar enlace envía “Obtener” en lugar de “Eliminar” en la vista de Rails 3

Estoy usando Rails 3 y tengo una página que muestra una lista de publicaciones de la base de datos. Me gustaría poder eliminar una publicación de un enlace.

El segundo ejemplo a continuación funciona, pero el primero no. ¿Alguien sabe por qué el primero no funcionará? Mi vista contiene:

# this link sends a "GET" request which asks for the #show function  :delete %> # this link sends the proper "DELETE" request which asks for the #destroy function  :delete %> 

Mi archivo de rutas contiene lo siguiente:

 resources :posts 

Asegúrese de que su sección en el diseño incluya lo siguiente:

 < %= javascript_include_tag :defaults %> < %= csrf_meta_tag %> 

En Rails 3, las solicitudes de eliminación se están manejando con la ayuda de JavaScript para garantizar que la solicitud se envía correctamente. Si no tiene las metatags csrf y el código JavaScript requerido, eliminar enlaces no funcionará. Los archivos JavaScript :defaults incluyen, entre otros, prototype.js y application.js. Este último contiene las cosas que hacen que el enlace funcione, pero se basa en el marco Prototype.

Si no desea utilizar las bibliotecas predeterminadas de Prototype JavaScript, existen puertos de application.js para muchos otros frameworks. Aquí puede encontrar jQuery uno, por ejemplo.

Los botones seguirán funcionando independientemente de JavaScript, ya que el código HTML generado con button_to incluye toda la información necesaria por sí mismo. Es por eso que está viendo que el botón funciona mientras que el enlace no funciona.

parece

 < %= javascript_include_tag :defaults %> 

ya no es compatible

http://apidock.com/rails/ActionView/Helpers/AssetTagHelper/JavascriptTagHelpers/javascript_include_tag

En cambio, debes usar

 < %= javascript_include_tag 'application' %> 

En mi caso, estaba usando siguiente.

 < %= javascript_include_tag :defaults %> < %= csrf_meta_tag %> 

También estaba usando jQuery al incluir jQuery justo debajo del prototipo JS predeterminado. Eso estaba causando algún tipo de conflicto.

Las acciones destructivas se deben realizar como una presentación del formulario: http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist

Puede aplicarle un estilo apropiado al botón para eliminar el método o Usar formulario.

Esto funcionará El problema es el hecho de que necesita pasarlo por el camino correcto para que la ruta lo obtenga.

 < %= link_to 'Delete', post_path(post.id), :method => :delete %> 

Prueba esto … es un cambio simple …

agregue esto a su archivo route.rb

get ‘/ lists /: list_id / comments /: id’ => ‘comments # destroy’

Hice este cambio y ahora está funcionando …