web-dev-qa-db-fra.com

rails 3 - link_to to destroy ne fonctionne pas

J'essaie de créer un lien de destruction avec le contrôleur de mon utilisateur, j'utilise également un logiciel.

Voici mon code -

Vue

<%= link_to 'Delete User?', child, :confirm => "Are you sure you want to delete #{child.full_name}?", :method => :delete, :class => "user-additional", :style => "font-size:12px;font-weight:normal;" %>

Manette

def destroy
 if @user = User.find(params[:id])
  @user.destroy
  respond_to do |format| 
    format.html { redirect_to account_index_path } 
    format.xml { head :ok } 
  end
 end
end

Itinéraires

devise_for :users 
resources :users, :except => [:new]

Le lien se traduit en localhost: 3000/users/10

Lorsque l'utilisateur clique dessus, les utilisateurs s'affichent au lieu de les supprimer.

Des idées ?

37
Alex

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

utilisez plutôt button_to (en passant un :method => :delete) et appelez le bouton en conséquence.

64
Omar Qureshi

En fait, j'ai eu exactement le même problème hier

Essaye ça:

<%= button_to "delete", your_object, :method=>:delete, :class=>:destroy %>

Ça marche (au moins pour moi)

27
JayX

Si vous utilisez jQuery au lieu de Prototype, il vous manque probablement un fichier javascript.

Vous pouvez trouver des détails sur la façon de l'ajouter à votre projet à partir de la page jquery-ujs GitHub ou à partir de épisode 205 des Railscasts.

9
Florin

En fait, je pense que c’est parce que dans Rails 3, le javascript discret est désormais utilisé pour des fonctionnalités telles que celle-ci (Rails 2 générerait un tas de javascript en ligne vilain pour votre code, Rails 3 place le javascript dans un fichier externe et utilise HTML5 data- attributs pour interagir avec cela.)

Pour résoudre ce problème, vous devez inclure <%= csrf_meta_tags %> dans l'en-tête de votre page afin de référencer le code JavaScript externe. Il traite également des problèmes XSS.

Quelques détails ici: Supprimer le lien envoie "Get" au lieu de "Supprimer" dans la vue Rails 3

6
DanSingerman

De plus, si vous rencontrez ce problème en mode de production, c'est peut-être parce que vous n'avez pas compilé les actifs. Voir http://guides.rubyonrails.org/asset_pipeline.html#precompiling-assets

1
ReggieB

Si vous n'avez pas inclus jquery et jquery-ujs dans votre application, le lien link_to default fourni avec l'échafaud ne fonctionnera pas!

J'ai eu le même problème. Il a été résolu après y compris ces deux js!

1
SureshCS

Travaillé pour moi avec un message de confirmation.

<%= button_to 'Destroy', {action: :destroy, id: version.id},  onclick: 'return confirm("Are you sure?")', method: :delete %>
1
Deepak Kabbur

Si vous utilisez jQuery, assurez-vous d'avoir quelque chose comme ceci:

<script type="text/javascript">
  // this allows jquery to be called along with scriptaculous and YUI without any conflicts
  // the only difference is all jquery functions should be called with $j instead of $
  // e.g. $jQ('#div_id').stuff instead of $('#div_id').stuff
  var $jQ = jQuery.noConflict();
</script>
1
chech
  1. suivez les étapes de la partie installation Rails/jquery-ujs
  2. ajoutez <% = javascript_include_tag "application"%> dans votre fichier de mise en page.
1
Musaffa