2010-12-03 12 views
11

estoy teniendo problemas con mis verbos en Rails ...Rails 3 link_to (: method =>: borrar) no funciona

viendo una página de un recurso (perro), que has_many (pulgas). Incrustado en show.html.haml de perro es una llamada a render @dog.fleas que automáticamente (?) Encuentra & utiliza la plantilla en "pulgas/_flea.html.haml" para enumerar cada pulga asociada con dicho perro.

esto se visualiza correctamente. ¡Uf! Ahora, al lado de cada pulga, puse un enlace "Mata pulga" que va a una url: //localhost:3000/dogs/1/fleas/7. Que se genera por:

= link_to("Kill Flea", [ flea.dog, flea ], :method => :delete, :confirm => "Sure? A bunny will die") 

pero cada vez que se hace clic en ese enlace no hay confirmación ... y renders de la pulga página show.html. es como si estuviera usando GET en /dogs/1/fleas/7 en lugar de ELIMINAR?!?

ps no está preocupado por las arañas & robots eliminación de las cosas en mi base de datos ... sólo estoy tratando de aprender Rails..and entender lo que está pasando

Respuesta

25

Rails 3 utiliza ahora un javascript discreto. En Rails 2.3, erb simplemente metería todo ese javascript problemático en el mismo enlace, en un evento onClick. Ahora el javascript se ha movido fuera del enlace, y en archivos js externos. Asegúrese de que tiene esto en su diseño:

<%= javascript_include_tag :all %> 

Si no tiene esto, puede haber problemas más profundos mantener su javascript de correr, pero este es el lugar para comenzar. Déjame saber cómo resulta.

+0

¡Santa mierda! ¡eres el hombre! He estado mirando esos mensajes de error durante horas ... y probando todo lo que pude pensar ... ¡maldiciendo a Rails todo el tiempo! ¡GRACIAS! – Meltemi

+0

solo por curiosidad ¿qué/cómo/dónde debería estar buscando pistas si algo como esto surge de nuevo?!? – Meltemi

+0

Bueno, este es un problema de una sola vez. Si las cosas relacionadas con JavaScript no funcionan, es probable que el diseño no contenga el comando de inclusión. Pero si estás buscando otras cosas de transición de Rails 3, echa un vistazo a railscasts.com - Ryan Bates ha creado algunos screencasts increíbles sobre la migración a Rails 3. –

0

Parece que el método link_to no es del todo bien . Trate de usar este código en su lugar:

<%= link_to 'Kill Flea', [flea.dog, flea], :confirm => 'Sure?', :method => :delete %> 
+0

intenté cambiar los parámetros ... sin éxito. Resulta que era javascript cuando @Jamie llamó al – Meltemi

+0

gotcha. ¡me alegra que lo hayas resuelto! –

12

Compruebe su <%= javascript_include_tag %> en application.html.erb

Quizás se echa en falta el js "aplicación"

Se debe buscar al menos como

<%= javascript_include_tag "application" %> 
+2

Pregunta anterior ... pero te arrojaré un hueso ... +1 – Meltemi

+1

En general, esta es la respuesta más adecuada en mi opinión. Works, solo llama al archivo js relevante, es sucinto. – Jerome

17

Hola También puede probar esto:

application.html.erb:

<%= javascript_include_tag 'jquery_ujs' %> 

OR 

<%= javascript_include_tag "http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js", "jquery.rails.js" %> 
+1

La mejor respuesta porque muestra una forma de cargar solo el archivo requerido, en lugar de otros que muestran cómo incluir todos los archivos, lo que es malo para el rendimiento. –

+0

esta es la respuesta correcta. –

+0

Esta es la respuesta que me ayudó. Necesitaba asegurarme de tener esto en application.js: '// = require jquery_ujs' –

1

verificación si application.html.erb

<%= javascript_include_tag :application %> 

no como:

<%= javascript_include_tag :default %> 
2

Aquí estoy que no utilizan el javascript_include_tag: todos,: aplicación, etc. estoy usando mis propios archivos js , con otro nombre personalizado: javascript_include_tag: my_custom_file y también tuve este problema. Y no estoy usando '= require jquery' en el archivo, pero javascript/jquery está funcionando. Creo que Rails incluye jquery por defecto.Lo que he hecho es que cambié el

link_to "Logout", destroy_user_session_path, :method => :delete 

a

form_tag destroy_user_session_path, :method => :delete, :id => "logout_form" 
    link_to 'Logout', "#delete", :onclick => "$('#logout_form').submit();" 

Ahora bien su trabajo.

+0

Gracias por su buen trabajo. Estaba enfrentando un problema con algún plugin de popover en el cual el enlace se enviaba como solicitud de obtención. Esto funcionó para mí. – jbmyid

Cuestiones relacionadas