Supprimer le lien envoie «Obtenir» au lieu de «Supprimer» dans la vue Rails 3

J’utilise Rails 3 et j’ai une page qui affiche une liste de publications de la firebase database. Je voudrais pouvoir supprimer un article d’un lien.

Le deuxième exemple ci-dessous fonctionne, mais pas le premier. Quelqu’un sait-il pourquoi le premier ne fonctionnera pas? Ma vue contient:

# 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 %> 

Le fichier Mes itinéraires contient les éléments suivants:

 resources :posts 

Assurez-vous que votre section dans la mise en page comprend les éléments suivants:

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

Dans Rails 3, les demandes de suppression sont traitées à l’aide de JavaScript pour garantir que la demande est correctement envoyée. Si vous ne disposez pas des balises méta csrf et du code JavaScript requirejs, la suppression des liens ne fonctionnera pas. Les fichiers JavaScript :defaults incluent, entre autres, prototype.js et application.js. Ce dernier contient les éléments qui font fonctionner le lien, mais repose sur le framework Prototype.

Si vous ne souhaitez pas utiliser les bibliothèques JavaScript par défaut de Prototype, il existe des ports application.js pour plusieurs autres frameworks. Vous pouvez trouver celui de jQuery ici , par exemple.

Les boutons fonctionneront toujours indépendamment de JavaScript, car le code HTML généré avec button_to inclut toutes les informations nécessaires. C’est pourquoi vous voyez le bouton fonctionner alors que le lien ne fonctionne pas.

ressemble à

 <%= javascript_include_tag :defaults %> 

n’est plus supporté

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

Au lieu de cela, vous devriez utiliser

 <%= javascript_include_tag 'application' %> 

Dans mon cas, j’utilisais les suivants.

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

J’utilisais aussi jQuery en incluant jQuery juste en dessous du prototype JS par défaut. Cela causait une sorte de conflit.

Les actions destrucsortingces doivent être effectuées sous la forme d’une soumission de formulaire – http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist

Vous pouvez personnaliser le bouton de manière appropriée pour la méthode de suppression ou Utiliser le formulaire.

Cela fonctionnera. Le problème est le fait que vous devez passer le bon chemin pour que la route l’obtienne.

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

Essayez ceci .. c’est un simple changement ..

ajoutez ceci à votre fichier route.rb

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

J’ai fait ce changement et maintenant son fonctionnement.