Keith,

   there is something odd; you have scaffolded 'Album', but then you called
the Controller 'Public'.. no wonder that Rails is confused. Is there a
reason that you need to call your controller "Public"? it does not make
sense as a name for a controller, and moreover if you call it Album,
everything will be easier; you would go with the Rails wind, not fight
against it.

Also: using Urls like '/public/destroy/id' is really going back to Rails 1.
The action 'destroy' (or 'create', etc) should not be part of the Url; this
is the reason that we  specify :method  => :destroy.
If you wanted to use '/public/destroy/id' then you should remove the
':method => :destroy'. However, beware that this is not a good design.

I suggest you to read the AWDWR book that you mentioned: see how they obtain
the 'product' controller and model, and how they end up with clean Urls and
helpers:

     <%= link_to 'Show', product %><br/>
     <%= link_to 'Edit', edit_product_path(product) %><br/>
     <%= link_to 'Destroy', product, :confirm => 'Are you sure?',
                                       :method => :delete %>

I think that if you used these techniques not only you would simplify
tremendously your work, but you would also learn something valuable (instead
of those insane tips like '/public/destroy/37' from those blogs and forums,
that teach the wrong way to do things)

Raul


On Mon, Oct 20, 2008 at 12:36 PM, <[EMAIL PROTECTED]> wrote:

>
> Hi Raul,
>
> I did as you suggested without editing the routes.rb file and I still
> managed to come up the ' Unknown action No action
> responded to destroy'
>
> <%= link_to  'Destroy', {:action => 'destroy', id =>
> @album.id},
>
>                                      :confirm => 'Are you
> sure?',
>
>                                      :method => :delete %>
>
> However I did managed to find another comment with the same type of
> issue, which was
> <%= link_to 'Destroy', movie, :confirm => 'Are you sure?', :method
> => :delete %>  which was from
> http://fairleads.blogspot.com/2008/01/this-is-second-part-of-my-series.html
> .
>
>
> With this information I replace the following
>
> # replace the line
> <%= link_to  'Destroy', {:action => 'destroy', id =>
> @album.id},
>
>                                      :confirm => 'Are you
> sure?',
>
>                                      :method => :delete %>
>
> # with
>
> <%= link_to 'Destroy', @album, :confirm => 'Are you sure?', :method
> => :delete %>
>
> And I added in the following into my routes.rb file
>
>
> ActionController::Routing::Routes.draw do |map|
>  map.resources :albums
>   map.connect '/public/destroy/:id', :controller => 'public', :action
> => 'destroy'    ~#  New line added
>
>
>
>  # The priority is based upon order of creation: first created ->
> highest priority.
>
>  # Sample of regular route:
>  #   map.connect 'products/:id', :controller => 'catalog', :action =>
> 'view'
>  # Keep in mind you can assign values other than :controller
> and :action
>
>  # Sample of named route:
>  #   map.purchase 'products/:id/purchase', :controller =>
> 'catalog', :action => 'purchase'
>  # This route can be invoked with purchase_url(:id => product.id)
>
>  # Sample resource route (maps HTTP verbs to controller actions
> automatically):
>  #   map.resources :products
>
>  # Sample resource route with options:
>  #   map.resources :products, :member => { :short => :get, :toggle
> => :post }, :collection => { :sold => :get }
>
>  # Sample resource route with sub-resources:
>  #   map.resources :products, :has_many =>
> [ :comments, :sales ], :has_one => :seller
>
>  # Sample resource route with more complex sub-resources
>  #   map.resources :products do |products|
>  #     products.resources :comments
>  #     products.resources :sales, :collection => { :recent => :get }
>  #   end
>
>  # Sample resource route within a namespace:
>  #   map.namespace :admin do |admin|
>  #     # Directs /admin/products/* to Admin::ProductsController (app/
> controllers/admin/products_controller.rb)
>  #     admin.resources :products
>  #   end
>
>  # You can have the root of your site routed with map.root -- just
> remember to delete public/index.html.
>   map.root :controller => "albums"
>
>  # See how all your routes lay out with "rake routes"
>
>  # Install the default routes as the lowest priority.
>  map.connect ':controller/:action/:id'
>  map.connect ':controller/:action/:id.:format'
> end
>
>
> However it seems to be working but when I do confirm to delete it
> redirects me to another action by default being  :controller =>
> "albums" and this is set in my routes.rb file like so
>
>  # You can have the root of your site routed with map.root -- just
> remember to delete public/index.html.
>   map.root :controller => "albums"
>
>
> How can I amend this so it can redirect it to my action I want it to
> go to?
>
> I have copied in my Controller
>
> class PublicController < ApplicationController
>
>  def album_list
>    @albums = Album.find_by_sql('SELECT * FROM albums
>    WHERE release_date <= \'2006-11-10\'AND artist LIKE \'%Tupac%\'
>    ORDER BY release_date ASC ;')
>  end
>
>  def alt_album_list
>    release_date = '2006-11-10'
>    artist = ''
>    @albums = Album.find(:all,
>   :conditions => ["release_date <= ? AND artist LIKE ?",release_date,
> '%' + artist +'%'],
>   :order => 'title ASC',
>   :limit => 25)
>     render(:action => 'album_list')
>
>  end
>
>     def show_album
>    release_date = '2006-11-10'
>    artist = 'Tupac'
>    @album = Album.find(:first,
>   :conditions => ["release_date <= ? AND artist LIKE ?",release_date,
> '%' + artist +'%'],
>   :order => 'title ASC')
>
> end
>
>    def list
>      @albums = Album.find(:all)
>      render(:action => 'album_list')
>     end
>
>
>     def show
>     @album = Album.find(params['id'])
>     render(:action => 'show_album')
>    end
>
>
>    def new
>      @album = Album.new
>    end
>
>    def create
>      @album = Album.new(params[:album])
>      if @album.save
>       redirect_to(:action =>'list')
>       else
>      render(:action => 'new')
>    end
>  end
>
>    def edit
>       @album = Album.find(params[:id])
>      end
>
>    def update
>       @album = Album.find(params[:id])
>       if @album.update_attributes(params[:album])
>       redirect_to(:action =>'list')
>       else
>      render(:action => 'new')
>     end
>
>
>      def destroy
>        @album = Album.find(params['id'])
>        @album.destroy
>        redirect_to(:action =>'list')
>      end
>
>
>
>    end
> end
>
>
> Do you have any ideas on why this is?
>
> Thanks
>
> Keith
>
>
>
> On Oct 19, 10:20 pm, "raul parolari" <[EMAIL PROTECTED]> wrote:
> > Hi, Keith
> >
> >    you missed my second email (sent immediately after ther first) where I
> > warned about the parenthesys that needed to be moved. Or, better, remove
> the
> > parenthesys, and just write:
> >
> > <%= link_to  'Destroy', {:action => 'destroy', id => @album.id},
> >
> >                                       :confirm => 'Are you
> > sure?',
> >                                       :method => :delete %>
> >
> > This SHOULD work, without changing anything in the routes.rb file.
> However,
> > allow me to point this important point:
> >
> > a) you have the routes.rb configured for REST, but you are not using the
> > Rest style Urls.
> >
> > b) You could delete the line map.resources :albums, if for some reason
> you
> > do not want the RESTful Urls, as at a certain moment there will be
> > confusion; or perhaps invert the order of the rules in routes.rb, as
> > suggested by the forum post (although I would delete, for more clarity).
> >
> > On the other hand,  if you wanted to to begin use the Rest routes
> (standard
> > in Rails since 2007), you would just need to do:
> >
> > # replace the lines for delete with:
> > <%= link_to "Destroy",    project_path(@album),
> >                       *:*confirm => 'Are you sure?', :method => :delete
> %>
> >
> > # replace the line
> > <%= link_to('Edit', :action => 'edit', :id => @album.id ) %>
> > # with:
> > <%= link_to "Edit",   edit_album_path(@album) %>
> >
> > But if you are inserting custom actions (like 'alt_album_list') you may
> want
> > to postpone moving to Rest for the moment. I just showed the above to let
> > you know.
> >
> > > ..."Ruby For Rails" by David A Black which is really helpful. I would
> also
> >
> > like recommend "Agile Web Development..."
> >
> > Yes, David Black book is great for Ruby; the AWDWR is great for Rails.
> >
> > One note: my updated advice for a person seriously interested in Ruby
> would
> > be:
> >
> > a) first, David Black's book mentioned above, as introduction to Ruby
> >
> > b) then,  "The Ruby Programming Language", by David Flanagan (with
> > contributions from Matz). Not only it shows 1.8, but also 1.9 (in a very
> > natural way, without confusion). An extraordinary book.
> >
> > Raul
> >
> >
> >
> > On Sun, Oct 19, 2008 at 1:17 PM, <[EMAIL PROTECTED]> wrote:
> >
> > > Hi Raul,
> >
> > > Thanks very much for getting back to me. I took your previously advise
> > > on the book that you recommended "Ruby For Rails" by David A Black
> > > which is really helpful. I would also like recommend "Aglie Web
> > > Development with Rails"  by Dave Thomas this book is also great if you
> > > are new to rails.
> >
> > > Well Raul I tried the following in my view,
> >
> > >      <% 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?',
> > >                                     :method => :delete)%>
> >
> > > and I thought would also try
> >
> > > <%= link_to('Destroy', {:action => 'destroy', id => @album.id},  ***I
> > > also changed the id to a symbol being :id***
> > >                                     :confirm => 'Are you sure?'),
> > >                                     :method => :delete %>    Rails
> > > didn't seem to like the parenthesis around :confirm => 'Are you
> > > sure?'#
> >
> > > I have also copied in my routes.rb file
> >
> > > ActionController::Routing::Routes.draw do |map|
> > >  map.resources :albums
> >
> > >  # The priority is based upon order of creation: first created ->
> > > highest priority.
> >
> > >  # Sample of regular route:
> > >  #   map.connect 'products/:id', :controller => 'catalog', :action =>
> > > 'view'
> > >  # Keep in mind you can assign values other than :controller
> > > and :action
> >
> > >  # Sample of named route:
> > >  #   map.purchase 'products/:id/purchase', :controller =>
> > > 'catalog', :action => 'purchase'
> > >  # This route can be invoked with purchase_url(:id => product.id)
> >
> > >  # Sample resource route (maps HTTP verbs to controller actions
> > > automatically):
> > >  #   map.resources :products
> >
> > >  # Sample resource route with options:
> > >  #   map.resources :products, :member => { :short => :get, :toggle
> > > => :post }, :collection => { :sold => :get }
> >
> > >  # Sample resource route with sub-resources:
> > >  #   map.resources :products, :has_many =>
> > > [ :comments, :sales ], :has_one => :seller
> >
> > >  # Sample resource route with more complex sub-resources
> > >  #   map.resources :products do |products|
> > >  #     products.resources :comments
> > >  #     products.resources :sales, :collection => { :recent => :get }
> > >  #   end
> >
> > >  # Sample resource route within a namespace:
> > >  #   map.namespace :admin do |admin|
> > >  #     # Directs /admin/products/* to Admin::ProductsController (app/
> > > controllers/admin/products_controller.rb)
> > >  #     admin.resources :products
> > >  #   end
> >
> > >  # You can have the root of your site routed with map.root -- just
> > > remember to delete public/index.html.
> > >   map.root :controller => "albums"
> >
> > >  # See how all your routes lay out with "rake routes"
> >
> > >  # Install the default routes as the lowest priority.
> > >  map.connect ':controller/:action/:id'
> > >  map.connect ':controller/:action/:id.:format'
> > > end
> >
> > > Does the error I'm receiving have anything to do with map.connect
> > > ':controller/:action/:id' being as lowest priority?
> >
> > > Thanks
> >
> > > Keith
> >
> > > On Oct 19, 8:21 pm, "raul parolari" <[EMAIL PROTECTED]> wrote:
> > > > Keith,
> >
> > > >   the closing parenthesis (that I had not noticed) has of course to
> be
> > > moved
> > > > at the end of the statement, so the line becomes:
> >
> > > > <%= link_to('Destroy', {:action => 'destroy', id => @album.id},
> > > >                                      :confirm => 'Are you sure?',
> > > >                                      :method => :delete) %>
> >
> > > > I would leave out the parenthesis, which are not needed here, and
> only
> > > add
> > > > noise
> >
> > > > Raul
> >
> > > > On Sun, Oct 19, 2008 at 12:00 PM, raul parolari <
> [EMAIL PROTECTED]
> > > >wrote:
> >
> > > > > Keith
> >
> > > > > The problem may be that you are using a GET Http verb to 'destroy'
> a
> > > > > resource (and Rails is not happy about it):
> >
> > > > > Try this: change the line:
> >
> > > > > <%= link_to('Destroy', {:action => 'destroy', id => @album.id},
> > > > >                                      :confirm => 'Are you sure?')
> %>
> > > > > into
> >
> > > > > <%= link_to('Destroy', {:action => 'destroy', id => @album.id},
> > > > >                                      :confirm => 'Are you sure?'),
> > > > >                                      :method => :delete %>
> >
> > > > > See if this solve the problem; else, you should show your routes.rb
> > > file.
> >
> > > > > Raul
> >
> > > > > On Sun, Oct 19, 2008 at 11:20 AM, <[EMAIL PROTECTED]>
> wrote:
> >
> > > > >> 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/
> >
> > ...
> >
> > read more ยป- Hide quoted text -
> >
> > - Show quoted text -
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google
Groups "ruby-on-rails-programming-with-passion" group.
To unsubscribe from this group, send email to
[EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/ruby-on-rails-programming-with-passion?hl=en?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to