Rails 5 has introduced new form helper method form_with
.
How does it differs with form_for
and when is it more appropriate to use?
You use form_for with a model and form_tag for custom URLs. Both generate HTML for a form . There are only a few minor differences so Rails 5.1 combined the two. You should now be using form_with .
form_for prefers the argument that you're passing in to be an active record object. This will easily make a create or edit form. We use form_for with a specific model and use form_tag when you don't have a model for it (for custom URLs). Both form_for and form_tag produce HTML for a form.
This is really in preparation for rails 5.1 where only form_with
should be used. It's meant to serve as a replacement for the two methods form_for
and form_tag
.
form_for
andform_tag
in Rails were very similar, both allowed you to create a form tag but the first one uses model’s attributes to build create or update form, while the second one simply creates an HTML form tag with the passed URL as action.
form_with
is the latest.form_for
and form_tag
are obsolete.See Kasper Timm Hansen's pull request - I cannot state it better than pull request itself:
form_tag and form_for serve very similar use cases. This PR unifies that usage such that form_with can output just the opening form tag akin to form_tag and can just work with a url, for instance.
This means you don't need to use form_tag if you don't have a model. You can use the form_with
helper and it can still handle URLs.
Note Re: Ids and Classes: The Ruby 5.1 version of form_with
, by default doesn't attach a class or id to the form. For Rails 5.2 and later, however, form_with
WILL automatically generate ids based on the model, if present—basically the same id behavior as form_for
, so you will NOT need to manually specify them anymore. (source)
Existing answers are great. What I also found helpful were the first few paragraphs here. Basically:
form_tag
andform_for
are soft deprecated and they will be replaced byform_with
in the future.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With