2010-10-27 4 views
1

La détruire l'action:rails 3 détruire l'action échoue

def destroy 
    @tag = Tag.find(params[:id]) 
    @tag.destroy 

    respond_to do |format| 
    format.html { redirect_to(tags_url) } 
    format.xml { head :ok } 
    end 
end 

Le lien:

<a href="/tags/14" data-confirm="Are you sure?" data-method="delete" rel="nofollow">Destroy</a> 

En cliquant dessus, rend l'action show.

Started GET "/tags/14" for 127.0.0.1 at Wed Oct 27 18:36:41 -0500 2010 
Processing by TagsController#show as HTML 
Parameters: {"id"=>"14"} 
Tag Load (0.2ms) SELECT "tags".* FROM "tags" WHERE ("tags"."id" = 14) LIMIT 1 
Rendered tags/show.html.erb within layouts/application (8.5ms) 
Completed 200 OK in 25ms (Views: 12.1ms | ActiveRecord: 0.2ms) 

javascript_include_tag: par défaut est inclus sur ma page et les balises de script rendent correctement. Firebug ne me donne aucune erreur. Cela se produit dans Firefox et Opera.

Répondre

1

C'est probablement comme cela que vous écrivez votre méthode link_to.

<%= link_to "Destroy", tag, :method => :delete, :confirm => "Really?" %> 

Essayez-le. Assurez-vous que la ressource est déclarée dans votre fichier routes.rb car c'est ce qui donne cette url freebee.

en 2.3.8 il est

map.resources :tags 

dans R3 Je ne sais pas vraiment, mais les guides ont comme ça

resources :tags 
+0

Cela fonctionne aussi si vous utilisez les aides intégrés – MatthewFord

+0

Il est écrit comme ça. seule différence est que l'ordre des: confirm et: method params est inversé. Je les ai changés juste au cas où cela aurait de l'importance, mais ce n'était pas le cas. – herpderp

+0

Est-ce que vous le déclarez dans votre fichier de routes? Ces routes ne sont disponibles que si vous avez map.resources: resource déclaré. Au moins c'est comme cela que 2.3.8 le fait, je n'ai pas encore mis à jour. – s84

0

Pour utiliser la méthode que vous devez être primordial d'envoyer le _method paramètre. Pour une action comme détruire, il doit s'agir d'une forme que vous POST avec le paramètre _method défini sur delete, vous pouvez construire le formulaire dans JS lorsque vous cliquez sur le lien si vous le souhaitez.