41 votes

Supprimer le lien envoie "Get" 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 base de données. J'aimerais pouvoir supprimer un message d'un lien.

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

 # this link sends a "GET" request which asks for the #show function  
<%= link_to 'Delete', post, :method => :delete %>

# this link sends the proper "DELETE" request which asks for the #destroy function
<%= button_to 'Delete', post, :method => :delete %>
 

Mon fichier de routes contient les éléments suivants:

 resources :posts 
 

48voto

vonconrad Points 14378

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

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

Dans Rails 3, supprimer les demandes sont traitées à l'aide de JavaScript afin de s'assurer que la demande est envoyé correctement. Si vous n'avez pas le csrf balises meta et le code JavaScript, supprimer les liens ne fonctionnent pas. L' :defaults JavaScript fichiers comprennent, entre others--prototype.js et application.js. Ce dernier contient la substance qui rend le lien de travail, mais s'appuie sur le Prototype de cadre.

Si vous ne souhaitez pas utiliser la valeur par défaut Prototype de bibliothèques JavaScript, il existe des ports de application.js pour plusieurs autres cadres. Vous pouvez trouver le jQuery, l'un ici, par exemple.

Boutons continuera de fonctionner indépendamment de JavaScript, le code HTML généré avec button_to comprend toutes les informations nécessaires par lui-même. C'est pourquoi vous voyez le bouton du travail alors que le lien ne fonctionne pas.

17voto

user575213 Points 63

ressemble à

 <%= javascript_include_tag :defaults %>
 

n'est plus pris en charge

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

Au lieu de cela, vous devriez utiliser

 <%= javascript_include_tag 'application' %>
 

3voto

Ninad Points 775

Dans mon cas, j'utilisais la suite.

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

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

2voto

Reality Points 535

Les actions destructives doivent être effectuées sous forme de soumission de formulaire - http://www.w3.org/2001/tag/doc/whenToUseGet.html#checklist

Vous pouvez attribuer un style au bouton pour la méthode de suppression ou Utiliser le formulaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X