What is the difference between form_for and form_tag? Is anything different for form_remote_for and form_remote_tag?
form_for
prefers, as its first arg, an activerecord object; it allows to easily make a create or edit form (to use it in a "new" view you should create an empty instance in controller, like:
def new
@foo = Foo.new
end
It also passes a form variable to the block, so that you don't have to repeat the model name within the form itself. it's the preferred way to write a model related form.
form_tag
just creates a form tag (and of course silently prepare an antiforgery hidden field, like form_for
); it's best used for non-model forms (I actually only use it for simple search forms or the like).
Similarly, form_remote_for
and form_remote_tag
are suited for model related forms and not model related forms respectively but, instead of ending in a standard http method (GET, POST...), they call an ajax method.
All this and far more are available for you to enjoy in the FormHelper and PrototypeHelper reference pages.
You would use form_for for a specific model,
<% form_for @person do |f| %> # you can use f here
First name: <%= f.text_field :first_name %>
Last name : <%= f.text_field :last_name %>
<% end %>
Form_tag create basic form,
<% form_tag '/person' do -%>
<%= text_field_tag "person", "first_name" %>
<% end -%>