J'essaie de créer un lien de destruction avec le contrôleur de mon utilisateur, j'utilise également un logiciel.
Voici mon code -
<%= 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;" %>
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
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 ?
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.
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)
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.
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
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
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!
Travaillé pour moi avec un message de confirmation.
<%= button_to 'Destroy', {action: :destroy, id: version.id}, onclick: 'return confirm("Are you sure?")', method: :delete %>
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>