Forum: Ruby on Rails Routing

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.
srj (Guest)
on 2009-04-14 20:47
(Received via mailing list)
I have an index page that shows each of my Customers, and each row in
the display has an Update link which routes to my update method.  That
simply does a find on the Customer id from the link and sets an
instance variable for the update view.

My update view renders a partial (same one used in the new/create) and
uses the following form:
     <form id="customerEditForm" method="get" controller ="Customer"
action="edit">

I have code in the edit method to get all the updated fields and
persist the changes.  However, when I click on the submit button, the
update action is executed, not the edit action.

I thought it may be something to do with Rails automatic routing, so I
renamed the update and edit actions to something very unusual ("edit"
was renamed to "sally", and "update" was renamed to "frank") - same
results - I wanted sally, but got frank.

What am I doing wrong?
Max W. (Guest)
on 2009-04-14 21:03
Usually the 'edit' action is the one that creates the page with the
form, and the form calls the 'update' action.  Usually there is no
update view, the update action will usually redirect to the show page
for that object or the index page for all objects of that type, or will
re-render the edit page if the object couldn't be saved (because it
fails validations, most commonly).

So, your links should go to the 'edit' action, not to 'update'.

The reason the form doesn't work is you're putting attributes in that it
doesn't know about, like controller: form tags just take an 'action'
attribute, which is the url to submit the form to.  However, hard coding
forms is bad.  Use form_for to make your form, which should look like
this:

<%= form_for @your_object do |f|%>
  <% f.text_field :name %>
  ..etc
<% end %>

This will submit to the update action automatically
srj (Guest)
on 2009-04-15 07:09
(Received via mailing list)
Thank you for the help, Max  -  I am making progress, but still have
an issue I cannot figure out.

The reason I was hard coding the form is because when I used the
form_for, I was getting unexpected results and errors (I cannot
remember now what they were).  But now that I go back to using
form_for,  I get an error like this:

     Unknown action

     No action responded to 3. Actions: create, edit, index, new, and
update

(In this case, 3 is the id of my Customer.  If I select a different
customer, I get that id in the error message.)

Any ideas on that error?

Thanks again,

Steve

On Apr 14, 1:03 pm, Max W. <removed_email_address@domain.invalid>
This topic is locked and can not be replied to.