I’m following Michael Hartl’s Rails Tutorial, and for some reason the following code:
<%= link_to 'delete', user, :method => :delete, :confirm => "You sure?",
:title => "Delete #{user.name}" %>
Issues a GET request (as I verified by checking the rails server log). I also verified that the following line is in my application view:
<%= javascript_include_tag :all %>
One thing I didn’t quite understand, and it’s probably the source of my problem: where is the “delete” method defined? I verified in Hartl’s source code that he defines a “destroy” method in the controller, not “delete”. But even if I change the link_to to :method => :destroy, it just issues a GET.
I’m using Rails 3.1. Any tips?
Most browsers don’t actually support the DELETE verb, so Rails fakes it by modifying the HTML it generates. Rails tacks on a HTML5 attribute called
data-methodand sets it to"delete". So when a user clicks on the link, it is actually issued as aGETrequest, but thedata-methodattribute allows for some Rails magic and means your routing code should recognize it as a DELETE request.edit:
You can test it yourself in the console. Run
bundle exec rails cto get into the console, and look at the HTML that this generates:The HTML should look like this: