Take the 2-minute tour ×

What is the difference between form_for and form_tag? Is anything different for form_remote_for and form_remote_tag?

share|improve this question
add comment

2 Answers

up vote 29 down vote accepted

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 -%>
share|improve this answer
add comment

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

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.

EDIT 2012-07-13

Prototype has been removed from rails long ago, and remote forms have completely changed. Please refer to the first link, with reguard to the :remote option of both form_for and form_tag.

share|improve this answer
The second link doesn't work. –  WowBow Jul 13 '12 at 2:59
@WowBow you're right; after all, this answer is quite old, and Prototype has been removed from rails long ago. I'll edit my answer. –  giorgian Jul 13 '12 at 11:29
add comment

Your Answer


