I have a button_to that I want to perform a PUT action (there is only one thing that can be updated about this resource - it will be updated as being 'acknowledged', so there are no other form fields associated with firing the action).
This is in my view (the controller is given explicitly because the button is on a view that belongs to another controller):
<%= button_to "Acknowledged", :controller => 'practice_sessions', :id => @practice_session.id, :method => :put %>
In my routes file, the resource has been declared as a restful resource:
resources :practice_sessions
The controller for this resource has a create and an update action, and the button_to above calls the create action. I want it to call the update action.
This comes through the log right before the create action fires:
Started POST "/practice_sessions?id=21&method=put" for 127.0.0.1 at 2010-11-17 08:52:46 +0000
Processing by PracticeSessionsController#create as HTML
Parameters: {"authenticity_token"=>"1EW0IlI38d0f4wST5azrCEZVZPfih7i0UvCGSF7eqbc=", "id"=>"21", "method"=>"put"}
Your syntax is slightly off. button_to
takes three arguments: the button title, an options
hash, and an html_options
hash. :method=>:put
needs to go in html_options
, while the route parameters need to go in options
. So you can rewrite like so:
<%= button_to "Acknowledged", { :controller => 'practice_sessions',
:id => @practice_session.id},
:method => :put %>
When clicked the request should be handled by PracticeSessionsController#update