2010-12-03 21 views
11

Je vais avoir du mal à avec mes verbes dans Rails ...Rails 3 link_to (: method =>: supprimer) ne fonctionne pas

affichage d'une page pour une ressource (Dog) qui has_many (Fleas). Embedded dans le chien show.html.haml est un appel à render @dog.fleas qui trouve automatiquement (?) & utilise le modèle dans "fleas/_flea.html.haml" pour lister chaque puce associée avec ledit chien.

Ceci s'affiche correctement. ouf! Maintenant, à côté de chaque puce, j'ai mis un lien "Kill Flea" qui va à un URL: //localhost:3000/dogs/1/fleas/7. Ce qui est généré par:

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

mais à chaque fois que vous cliquez sur le lien, il n'y a aucune confirmation ... et il rend la page show.html de la puce. c'est comme s'il utilisait GET sur /dogs/1/fleas/7 au lieu de DELETE?!?

PS- pas inquiet au sujet des araignées & robots choses dans ma suppression base de données ... je suis juste essayer d'apprendre Rails..and comprendre ce qui se passe

Répondre

25

Rails 3 utilise discrètement javascript maintenant. Dans Rails 2.3, erb ne ferait que glisser tout ce javascript désordonné directement dans le lien lui-même, dans un événement onClick. Maintenant, le javascript a été déplacé hors du lien, et dans les fichiers js externes. Assurez-vous que vous avez dans votre mise en page:

<%= javascript_include_tag :all %> 

Si vous avez cela, il pourrait y avoir des problèmes plus profonds garder votre javascript de courir, mais c'est l'endroit idéal pour commencer. Tiens-moi au courant de ce que ça devient.

+0

sainte merde! vous da man! J'ai regardé ces messages d'erreur pendant des heures ... et essayé tout ce à quoi je pouvais penser ... maudissant Rails tout le long du chemin! JE VOUS REMERCIE! – Meltemi

+0

juste par curiosité quoi/comment/où devrais-je chercher des indices si quelque chose comme ça se lève à nouveau?!? – Meltemi

+0

Eh bien, c'est un problème unique. Si les éléments liés à javascript ne fonctionnent pas, la mise en page manque probablement la commande include. Mais si vous cherchez d'autres trucs de transition Rails 3, consultez railscasts.com - Ryan Bates a créé des screencasts impressionnants sur la migration vers Rails 3. –

0

On dirait que votre méthode de link_to n'est pas tout à fait raison . Essayez d'utiliser ce code à la place:

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

J'avais essayé de changer les paramètres autour ... en vain. Il s'est avéré que c'était javascript car @Jamie a appelé – Meltemi

+0

gotcha. content que vous l'ayez compris! –

12

Vérifiez votre <%= javascript_include_tag %> dans application.html.erb

Peut-être que vous manquez les js

"application" Il faut regarder au moins comme

<%= javascript_include_tag "application" %> 
+2

Vieille question..mais je vais vous jeter un os ... +1 – Meltemi

+1

Dans l'ensemble, c'est la réponse la plus appropriée à mon avis. Works, seulement appelle le fichier js pertinent, est succinct. – Jerome

17

Salut vous pouvez aussi essayer ceci:

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

Meilleure réponse parce que montrer un moyen de charger juste le fichier requis, à la place d'autres qui montrent comment inclure tous les fichiers, ce qui est mauvais pour la performance. –

+0

c'est la bonne réponse. –

+0

C'est la réponse qui m'a aidé. Je devais m'assurer d'avoir ceci dans application.js: '// = require jquery_ujs' –

1

vérifier si application.html.erb

<%= javascript_include_tag :application %> 

pas:

<%= javascript_include_tag :default %> 
2

Ici, je ne suis pas le javascript_include_tag utilise: tous,: application, etc. J'utilise mes propres fichiers js , avec un autre nom personnalisé: javascript_include_tag: my_custom_file et j'ai également eu ce problème. Et je n'utilise pas '= require jquery' dans le fichier, mais javascript/jquery fonctionne. Je pense que Rails inclut jquery par défaut.Ce que je fait est que je changé le

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

à

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

Maintenant, sa fine de travail.

+0

Merci beaucoup workarround .. Je faisais face à un problème avec certains plug-in Popover dans lequel le lien était soumis comme demande. Cela a fonctionné pour moi. – jbmyid