2010-12-15 32 views
9

En index.html.erb que mostrar todos los productos, y al lado de cada producto tengo Edit y Delete acciones:¿Por qué Rails "link_to" no funciona para eliminar acción?

<% @products.each do |product| %> 
    ... 
    <%= link_to("Edit", edit_product_path(product.id), :class => 'action') %> 
    <%= link_to("Delete", product, :method => :delete, :class => 'action') %> 
    ... 
<% end %> 

El Edit enlace funciona bien. Sin embargo, el enlace Delete no funciona. Me sale el siguiente error:

Unknown action 
The action 'show' could not be found for ProductsController 

Supongo que es porque el método de solicitud es GET en lugar de DELETE. Pero, no sé por qué sucede esto si configuro explícitamente :method => :delete.

routes.rb es bastante simple:

root :to => "products#index" 
resources :products 

tengo Javascript habilitado.

Sugerido.

+0

¿usted intentó añadir la acción show, a pesar de que no lo esté utilizando para que sus rutas han cubierto ... es sólo una idea – Richard

+0

¿le ¿Tiene acción de eliminación en su controlador? Y también pruebe el comando rake: route para ver si la ruta de eliminación se define correctamente. – ranendra

Respuesta

11

¿Tiene rails.js especificado en un javascript_include_tag? Esto es necesario para que el método discreto DELETE funcione. Si estás usando jQuery entonces hay una solution for that too.

+0

En la fuente de la página veo que 'rails.js' está cargado. Yo uso jQuery 1.4.4. Es esto un problema ? Acabo de descargarlo del sitio oficial y ponerlo en 'javascript_include_tag'. ¿Debo reemplazarlo con archivos de su enlace? ¿Qué debería descargar exactamente? –

+2

@Misha: descargue el archivo rails.js en el directorio src y póngalo en su carpeta pública/javascripts como rails.js. Si está utilizando jQuery, * debe * reemplazar el Prototype 'rails.js' con el equivalente de jQuery. –

+0

@Ryan: ¡Muchas gracias por guiarme! Si utilizo jQuery en lugar de Prototype, ¿todavía necesito 'javascript_include_tag: defaults'? –

2

Necesita ser product_path(product) en lugar de product en su enlace eliminar.

+0

Intentó, no ayudó. Mismo error. –

+0

¿Cómo se ve el HTML resultante para la etiqueta de enlace? –

+0

'Delete' –

0

que tenía el mismo problema - en realidad había cambiado de acción antigua 'eliminar' a 'destruir' -, pero se olvidó Si su uso de SSL .. (por ejemplo ssl_required: destruir)

5

no se olvide de incluir en su jquery_ujsapplication.js archivo:?

// 
//= require jquery 
//= require jquery_ujs 
// ... 
Cuestiones relacionadas