<%= form_for(@listing) do |f| %> prepends model name to fields

Why does <%= form_for(@listing) do |f| %> the form helpers f.select, f.label, f.text_field, f.checkbox, f.radio_button all prepend model names to fields like listings_title, listings_description or in my browsers source listings[title] listings[description] and to avoid this i have to write my own html instead of using the helpers

actually it prepends in singular listing_title, listing_description, etc

Why does <%= form_for(@listing) do |f| %> the form helpers f.select, f.label, f.text_field, f.checkbox, f.radio_button all prepend model names to fields like listings_title, listings_description or in my browsers source listings[title] listings[description] and to avoid this i have to write my own html instead of using the helpers

What do you think the = in <%= form_for does?

Colin

i dunno, prints the result of the expression inside <% %> ?

So if i take out all the prependings of listing_ using my own html instead of the rails form helpers when i submit the form i’m gonna get errors?

i dunno, prints the result of the expression inside <% %> ?

Sorry, I did not read your post carefully enough so asked the wrong question.

Post (by copy/paste from your code) an example that shows the problem and also the html that is generated by it.

Always a good idea to provide an example so that there is no confusion about what is meant.

Colin

Are you trying to create a form field that is not bound to a model instance? The whole point of the "bound" helpers is to keep you from having to type the same thing over and over in the context of a form that modifies a particular instance of your model. The names of the fields it generates are designed to pass the correct nested hash of attribute values from the form to the controller, so you can do everything with very little code there (convention over configuration).

Rails also includes the "_tag" variants of these helpers, and they don't assume anything. You pass them the name, initial value, and attributes and you get a well-formed tag in the output. They don't use the form_for block attribute, either.

form_for @listing do |f|

f.text_field :name, class: 'name-field'

end

form_tag listing_path(@listing) do

text_field_tag 'listing[name]', @listing.name, class: 'name-field'

end

Unless I am mistaken, those are roughly equivalent, but the former has less typing required, fewer chances to get it wrong. If you just want a particular tag to be output in the context of a form_for (bound) form helper, you can mix and match the _tag variant inside there, just as you can also add hand-written tags (or indeed, any other HTML you like) inside the form_for block. You may want to do this for JavaScript reasons unrelated to the rest of your form, and excluded or ignored by your controller's update and create methods. But all this is a guess on my part, because you haven't outlined your actual issue here.

Walter