I read in the Agile Rails book that I should avoid GETs for destructive actions. I notice that on 37signals'' Backpack web site, deleting an item in a list is accomplished with a simple click on a picture of a trash can. Is this a violation of the POST/GET rule noted above, or is there some way to make a clickable link send a POST? Ben
Hi, Here is a quote from DHH. You can find it here: http://www.37signals.com/svn/archives2/the_google_web_accelerator_is_back_with_a_vengeance.php ---- If you?re using Rails, you can now do links like: link_to ?Destroy!?, :action => ?destroy?, :post => true. That?ll create a link with an onclick that uses POST for submit. If the user has js turned off, a GET will still be send. On the server-side, you can then use verify :destroy, :method => :post. Yeah, it?s a bit cumbersome, but at least it?s there. ---- -Eric Goodwin ericgoodwin.com Ben Nevile wrote:> I read in the Agile Rails book that I should avoid GETs for > destructive actions. I notice that on 37signals'' Backpack web site, > deleting an item in a list is accomplished with a simple click on a > picture of a trash can. Is this a violation of the POST/GET rule > noted above, or is there some way to make a clickable link send a > POST? > > Ben > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails-- Eric Goodwin http://www.ericgoodwin.com
Thanks for your response, Eric. If I may be permitted a follow-up question,> On the server-side, you can then use verify > :destroy, :method => :post.Am I correct in assuming that this call should be in my ApplicationController class? It''s the only controller in my app that''s a direct subclass of ActionColler::Base. if I add verify :remove_from_chosen_labels, :method => :post rails complains that I have the wrong number of arguments (it expects one.) the call verify :only => :remove_from_chosen_labels, :method => :post sends me to a blank page, even though through the method you describe above I have set post = TRUE (and this is verified in the URL of this blank page.) if I say verify :only => :remove_from_chosen_labels, :method => :post, :redirect_to :index I get a stack overflow. Any hints for this newbie? Thanks everyone, Ben
To answer my own question, the problem was that I actually was not generating POSTs. This is because I had <%= link_to "#{@chosen_labels[i].name}", :action => ''remove_from_chosen_labels'', :id => @chosen_labels[i].id, :post => true %> but I should have had <%= link_to "#{@chosen_labels[i].name}", {:action => ''remove_from_chosen_labels'', :id => @chosen_labels[i].id}, :post => true %> Ben
|Hi Ben, This should work. class WhateverController < ActionController::Base | verify :method => :post, :only => :remove_from_chosen_labels, :redirect_to => { :action=> "index" } | def |remove_from_chosen_labels | # a GET request will never gain access to me end end I''ve taken it from Loud Thinking and modified it a bit. If you check out the post there is some more info on it. http://www.loudthinking.com/arc/000529.html If you are using route names and have and index url specified then you can should be able to just have: |:redirect_to => :index_url I''ve included a few comments in your post below as well. Cheers, Eric Goodwin | | Ben Nevile wrote:> Thanks for your response, Eric. If I may be permitted a follow-up > question, > >> On the server-side, you can then use verify >> :destroy, :method => :post. > > > Am I correct in assuming that this call should be in my > ApplicationController class? It''s the only controller in my app > that''s a direct subclass of ActionColler::Base. > > if I add > > verify :remove_from_chosen_labels, :method => :postYou''re passing in a hash, you need to specify the key and the value. ie key => value This method can be rewritten as: verify({:method => :post,:only =>:remove_from_chosen_labels })> > rails complains that I have the wrong number of arguments (it expects > one.) the call > > verify :only => :remove_from_chosen_labels, :method => :posthmmm .. not sure why this isn''t working> > sends me to a blank page, even though through the method you describe > above I have set post = TRUE (and this is verified in the URL of this > blank page.) if I say > > verify :only => :remove_from_chosen_labels, :method => :post, > :redirect_to :indexmissing ''=>''> > I get a stack overflow. > > Any hints for this newbie? > > Thanks everyone, > Ben > _______________________________________________ > Rails mailing list > Rails@lists.rubyonrails.org > http://lists.rubyonrails.org/mailman/listinfo/rails-- Eric Goodwin http://www.ericgoodwin.com