Forum: Ruby on Rails Destroy Action

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
8d0346e443bd562faa5c88c98da9e874?d=identicon&s=25 Keith (Guest)
on 2008-10-19 20:40
(Received via mailing list)
Hi Everyone,

I have just created a destroy action in my controller, it was working
fine about 2 hours ago and now for some reason it has stopped working.
Once I click on destroy I receive  ' Unknown action No action
responded to destroy'. The action that I want it to redirect to is
'list' and this action does work as I have another action that
redirects to 'list' fine. Could anyone let me in to what I I have done
wrong please...?

def list
      @albums = Album.find(:all)
      render(:action => 'album_list')
     end

def destroy
        @album = Album.find(params[:id])
        @album.destroy
        redirect_to(:action =>'list')
      end

And in my view I have

<% if @album != nil -%>
         ID:     <%= @album.id %><br/>
         Title:  <%= @album.title %> <br/>
         Artist: <%= @album.artist %><br/>
         Genre:  <%= @album.genre  %><br/>
      <%  else -%>
         No record found.

      <% end -%>
      <%= link_to('Back', :action => 'alt_album_list') %> |
      <%= link_to('Edit', :action => 'edit', :id => @album.id ) %> |
      <%= link_to('Destroy', {:action => 'destroy', id =>
@album.id}, :confirm => '
        Are you sure?') %>

When I go into the logs I get the following error message

Processing PublicController#destroy (for 127.0.0.1 at 2008-10-19
16:32:19) [GET]
  Session ID:
BAh7ByIKZmxhc2hJQzonQWN0aW9uQ29udHJvbGxlcjo6Rmxhc2g6OkZsYXNo
SGFzaHsABjoKQHVzZWR7ADoMY3NyZl9pZCIlZmFlNWMzZDcxOWY5OTM0Yzhk
ZDk0YTgwMDU4OWNkMDA=--5ecae299067ff9537732b80de514985b52f69fab
  Parameters: {"controller"=>"public", "action"=>"destroy",
"id"=>"15"}


ActionController::UnknownAction (No action responded to destroy):
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/filters.rb:580:in
`call_filters'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/filters.rb:573:in
`perform_action_with_filters'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/benchmarking.rb:68:in
`perform_action_with_benchmark'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/1.8/benchmark.rb:
293:in `measure'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/benchmarking.rb:68:in
`perform_action_with_benchmark'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/rescue.rb:201:in
`perform_action_with_rescue'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/caching/sql_cache.rb:13:in
`perform_action_with_caching'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
activerecord-2.1.0/lib/active_record/connection_adapters/abstract/
query_cache.rb:33:in `cache'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
activerecord-2.1.0/lib/active_record/query_cache.rb:8:in `cache'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/caching/sql_cache.rb:12:in
`perform_action_with_caching'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/base.rb:529:in `process'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/filters.rb:569:in
`process_with_filters'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/session_management.rb:130:in
`process_with_session_management_support'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/base.rb:389:in `process'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/dispatcher.rb:149:in
`handle_request'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/dispatcher.rb:107:in `dispatch'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/dispatcher.rb:104:in
`synchronize'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/dispatcher.rb:104:in `dispatch'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/dispatcher.rb:120:in
`dispatch_cgi'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
actionpack-2.1.0/lib/action_controller/dispatcher.rb:35:in `dispatch'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
rails-2.1.0/lib/webrick_server.rb:112:in `handle_dispatch'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/gems/
rails-2.1.0/lib/webrick_server.rb:78:in `service'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/1.8/webrick/
httpserver.rb:104:in `service'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/1.8/webrick/
httpserver.rb:65:in `run'
    C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/1.8/webrick/
server.rb:173:in `start_thread'
    :1:in `start'

Rendering C:/Users/Keith/.netbeans/6.1/jruby-1.1/lib/ruby/gems/1.8/
gems/actionpack-2.1.0/lib/action_controller/templates/rescues/
layout.erb (not_found)


Has anyone came across this before? I have done  research on the
message and someone has the same problem and fixed it by going into
the following

This is a comment I found from another group


I got this error (ActionController::UnknownAction - No action
responded to ...), and I noticed it was because the link_to helper
generated bad URL's (in the ":controller/:id/:action" format rather
than ":controller/:action/:id").

The fix was to change the order of statements in the config/routes.rb
file; move my "map.resources" statements higher up in the file
(=higher priority).

Thanks everyone
7ef5d973297a0843651aaa9c92b24a08?d=identicon&s=25 Baba Bobo (bababobo)
on 2008-11-21 07:36
Moving "map.resources: highest did not work for me i moved
map.resources :users to top but still my destroy method which was using
:method => 'post', did not work untill i add the following in my
routes.rb under the map.resources :users

map.connect '/users/:id/', :controller => 'users', :action => 'destroy',
:id => /\d+/

, so the new routes.rb (without comments #) looked like following:

ActionController::Routing::Routes.draw do |map|
 map.resources :users
 map.connect '/users/:id/', :controller => 'users', :action =>
'destroy', :id => /\d+/

  map.connect ':controller/:action/:id'
  map.connect ':controller/:action/:id.:format'
end

I hope that helps
7ef5d973297a0843651aaa9c92b24a08?d=identicon&s=25 Baba Bobo (bababobo)
on 2008-11-21 07:38
Just tested even adding the following short version, also works fine:

map.connect '/users/:id/', :controller => 'users', :action => 'destroy'
7ef5d973297a0843651aaa9c92b24a08?d=identicon&s=25 Baba Bobo (bababobo)
on 2008-11-21 07:56
Baba Bobo wrote:
> Just tested even adding the following short version, also works fine:
>
> map.connect '/users/:id/', :controller => 'users', :action => 'destroy'

sorry just tested while this short version fixes the 'destroy' method
but it breaks the 'new' method so you will have to use the above
mentioned full version which is:

map.connect '/users/:id/', :controller => 'users', :action => 'destroy',
:id => /\d+/
This topic is locked and can not be replied to.