Question

J'ai deux liens:

<%= link_to("Edit", edit_product_path(product.id)) %>
<%= link_to("Delete", product, :method => :delete) %>

Les liens générés sont:

<a href="/products/81/edit">Edit</a>
<a href="/products/81" data-method="delete" rel="nofollow">Delete</a>

En cliquant à la fois sur Edit et Delete, la méthode GET est utilisée.

Comment Rails a décidé quelle méthode utiliser?

Que signifie de data-method="delete" et rel="nofollow" dans le lien Delete?

Était-ce utile?

La solution

navigateurs prennent en charge habituellement GET et POST méthodes HTTP. Pour Emuler PUT et verbes SUPPRIMER, Rails injectent un paramètre spécial _method lorsqu'un formulaire est soumis.

Vous spécifiez la méthode que vous souhaitez utiliser en passant l'option :method, comme vous l'avez fait.

<%= link_to("Action with DELETE", path_to_something, :method => :delete) %>
<%= link_to("Action with PUT", path_to_something, :method => :put) %>

Sauf mention contraire, la valeur par défaut est GET.

A partir de Rails 3, Rails utilise JavaScript discret pour gérer la méthode SUPPR. Il passe le HTTP verbe dans l'attribut data-method, qui est un HTML 5 fonctionnalité .

Dans votre cas, il ne fonctionne pas parce que vous avez probablement oublié d'inclure une bibliothèque JavaScript (par exemple Prototype ou jQuery) et l'adaptateur Rails.

Assurez-vous que vous utilisez soit jQuery ou Prototype, et vous incluez le fichier javascript rails.js. En outre, ne pas oublier d'ajouter le csrf_meta_tag.

<%= csrf_meta_tag %>

Si vous voulez apprendre mouvement, je l'ai écrit un article sur Unobtrusive JavaScript Rails 3 il y a quelques mois.

Autres conseils

Intéressant. Je peux confirmer que link_to avec « : méthode =>: suppression » l'option fonctionne dans l'échafaudage par défaut. Cependant, en essayant de construire un projet sans échafaudage, je ne peux pas link_to au travail. button_to œuvres sans problème, en utilisant les mêmes paramètres qui ont échoué avec link_to.

Dans ma balise HEAD j'ai le javascript requis comprend:

javascript_include_tag :defaults
csrf_meta_tag

Très déroutant. Je ne pouvais pas comprendre ce que l'échafaudage « sauce secrète » met en jeu pour faire link_to travail. Alors que l'affirmation de Rob qui link_to suppression ne fonctionne pas dans Rails 3, ne peut pas être techniquement précis, je l'ai trouvé pratiquement exact. Merci Rob, j'avais été coincé pendant des heures jusqu'à ce que j'ai vu votre message.

Vous ne pouvez pas utiliser un lien pour une suppression dans des rails 3 Vous devez utiliser un button_to par exemple.

<%= button_to("Delete", product, :method => :delete) %>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top