Totally stumped on this as I believe it's using the correct restful setup but I can't seem to delete my list.
I have the following:
Controller:
def destroy
    @list = List.find(params[:id])
    @list.destroy
    redirect_to lists_path
end 
#37 def show
#38     @list = List.find(params[:id])
#39 end
Index.html.haml
- @list.each do |list| 
    ...
    = link_to "Delete", list_path(list), method: :delete, data: { confirm: 'Are you certain you want to delete this?' }
    ...
Routes:
ListApp::Application.routes.draw do
    devise_for :users
    resources :lists
Which is giving the correct rake routes output of:
           lists GET    /lists(.:format)               lists#index                                                                                                                                                                     
                 POST   /lists(.:format)               lists#create                                                                                                                                                                    
        new_list GET    /lists/new(.:format)           lists#new                                                                                                                                                                       
       edit_list GET    /lists/:id/edit(.:format)      lists#edit                                                                                                                                                                      
            list GET    /lists/:id(.:format)           lists#show                                                                                                                                                                      
                 PATCH  /lists/:id(.:format)           lists#update                                                                                                                                                                    
                 PUT    /lists/:id(.:format)           lists#update                                                                                                                                                                    
                 DELETE /lists/:id(.:format)           lists#destroy
But I am still getting the following error when running in production environment.
I, [2013-09-10T15:27:40.338022 #453]  INFO -- : Started GET "/lists/2" for 81.159.35.212 at 2013-09-10 15:27:40 +0000                                                                                                                          
I, [2013-09-10T15:27:40.340626 #453]  INFO -- : Processing by ListsController#show as HTML                                                                                                                                                     
I, [2013-09-10T15:27:40.340867 #453]  INFO -- :   Parameters: {"id"=>"2"}                                                                                                                                                                      
I, [2013-09-10T15:27:40.354092 #453]  INFO -- : Completed 500 Internal Server Error in 13ms                                                                                                                                                    
F, [2013-09-10T15:27:40.359807 #453] FATAL -- :                                                                                                                                                                                                
NameError (undefined local variable or method `list' for #<ListsController:0x000000050a7c38>):                                                                                                                                                 
  app/controllers/lists_controller.rb:38:in `show'  
If anyone knows what could be causing this any help would be much appreciated :)
Updated answer.
Your link_to declaration looks fine: 
= link_to "Delete", list_path(list), method: :delete, data: { confirm: 'Are you certain you want to delete this?' }
It' likely that you do not have necessary javascript included in your layout file:
# app/views/layouts/application.html.haml
%head
  = javascript_include_tag "application"
  = csrf_meta_tag %>
which is why the list_path is not able to execute the destroy action and is trying to execute the show action.  
If this does not work, then the problem is elsewhere that's preventing the javascript from being executed.
Looking at your log output, the link is sending a GET request instead of a DELETE request. In rails, a link with method: :delete gets changed from a GET request to a DELETE request via JavaScript. 
My hunch is that you are not including the Rails default jquery javascript files either in your application.js or via = javascript_include_tag :defaults, which will get you jquery and jquery.ujs for Rails. 
Can you verify that jquery and jquery.ujs are loaded on your page with the delete link?
Alternately, try adding = javascript_include_tag :defaults to your view/layout and see if the link starts working.
Also, I suggest that you watch and follow this Railscasts on Unobtrusive Javascript for more information.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With