Provides a number of methods for creating form tags that doesn’t rely on conventions with an object assigned to the template like FormHelper does. With the FormTagHelper, you provide the names and values yourself.

NOTE: The html options disabled, readonly, and multiple can all be treated as booleans. So specifying :disabled => true will give disabled="disabled".

Methods
C
E
F
H
I
P
R
S
T
Instance Public methods
check_box_tag(name, value = "1", checked = false, options = {})

Creates a check box.

# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 142
def check_box_tag(name, value = "1", checked = false, options = {})
  html_options = { "type" => "checkbox", "name" => name, "id" => name, "value" => value }.update(options.stringify_keys)
  html_options["checked"] = "checked" if checked
  tag :input, html_options
end
end_form_tag()

Outputs “</form>”

# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 63
def end_form_tag
  "</form>"
end
file_field_tag(name, options = {})

Creates a file upload field.

If you are using file uploads then you will also need to set the multipart option for the form:

<%= form_tag { :action => "post" }, { :multipart => true } %>
  <label for="file">File to Upload</label> <%= file_field_tag "file" %>
  <%= submit_tag %>
<%= end_form_tag %>

The specified URL will then be passed a File object containing the selected file, or if the field was left blank, a StringIO object.

# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 114
def file_field_tag(name, options = {})
  text_field_tag(name, nil, options.update("type" => "file"))
end
form_tag(url_for_options = {}, options = {}, *parameters_for_url, &block)

Starts a form tag that points the action to an url configured with url_for_options just like ActionController::Base#url_for. The method for the form defaults to POST.

Examples:

  • form_tag('/posts') => <form action="/posts" method="post">

  • form_tag('/posts/1', :method => :put) => <form action="/posts/1" method="put">

  • form_tag('/upload', :multipart => true) => <form action="/upload" method="post" enctype="multipart/form-data">

ERb example:

<% form_tag '/posts' do -%>
  <div><%= submit_tag 'Save' %></div>
<% end -%>

Will output:

<form action="/posts" method="post"><div><input type="submit" name="submit" value="Save" /></div></form>

Options:

  • :multipart - If set to true, the enctype is set to "multipart/form-data".

  • :method - The method to use when submitting the form, usually either "get" or "post".

    If "put", "delete", or another verb is used, a hidden input with name _method 
    is added to simulate the verb over post.
Also aliased as: start_form_tag
# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 33
def form_tag(url_for_options = {}, options = {}, *parameters_for_url, &block)
  html_options = options.stringify_keys
  html_options["enctype"] = "multipart/form-data" if html_options.delete("multipart")
  html_options["action"]  = url_for(url_for_options, *parameters_for_url)

  method_tag = ""
  
  case method = html_options.delete("method").to_s
    when %r^get$/ # must be case-insentive, but can't use downcase as might be nil
      html_options["method"] = "get"
    when %r^post$/, "", nil
      html_options["method"] = "post"
    else
      html_options["method"] = "post"
      method_tag = content_tag(:div, tag(:input, :type => "hidden", :name => "_method", :value => method), :style => 'margin:0;padding:0')
  end
  
  if block_given?
    content = capture(&block)
    concat(tag(:form, html_options, true) + method_tag, block.binding)
    concat(content, block.binding)
    concat("</form>", block.binding)
  else
    tag(:form, html_options, true) + method_tag
  end
end
hidden_field_tag(name, value = nil, options = {})

Creates a hidden field.

Takes the same options as #text_field_tag

# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 100
def hidden_field_tag(name, value = nil, options = {})
  text_field_tag(name, value, options.stringify_keys.update("type" => "hidden"))
end
image_submit_tag(source, options = {})

Displays an image which when clicked will submit the form.

source is passed to ActionView::Helpers::AssetTagHelper#image_path

# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 171
def image_submit_tag(source, options = {})
  tag :input, { "type" => "image", "src" => image_path(source) }.update(options.stringify_keys)
end
password_field_tag(name = "password", value = nil, options = {})

Creates a password field.

Takes the same options as #text_field_tag

# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 121
def password_field_tag(name = "password", value = nil, options = {})
  text_field_tag(name, value, options.update("type" => "password"))
end
radio_button_tag(name, value, checked = false, options = {})

Creates a radio button.

# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 149
def radio_button_tag(name, value, checked = false, options = {})
  pretty_tag_value = value.to_s.gsub(%r\s/, "_").gsub(%r(?!-)\W/, "").downcase
  html_options = { "type" => "radio", "name" => name, "id" => "#{name}_#{pretty_tag_value}", "value" => value }.update(options.stringify_keys)
  html_options["checked"] = "checked" if checked
  tag :input, html_options
end
select_tag(name, option_tags = nil, options = {})

Creates a dropdown selection box, or if the :multiple option is set to true, a multiple choice selection box.

Helpers::FormOptions can be used to create common select boxes such as countries, time zones, or associated records.

option_tags is a string containing the option tags for the select box:

# Outputs <select id="people" name="people"><option>David</option></select>
select_tag "people", "<option>David</option>"

Options:

  • :multiple - If set to true the selection will allow multiple choices.

# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 81
def select_tag(name, option_tags = nil, options = {})
  content_tag :select, option_tags, { "name" => name, "id" => name }.update(options.stringify_keys)
end
start_form_tag(url_for_options = {}, options = {}, *parameters_for_url, &block)
submit_tag(value = "Save changes", options = {})

Creates a submit button with the text value as the caption. If options contains a pair with the key of “disable_with”, then the value will be used to rename a disabled version of the submit button.

# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 158
def submit_tag(value = "Save changes", options = {})
  options.stringify_keys!
  
  if disable_with = options.delete("disable_with")
    options["onclick"] = "this.disabled=true;this.value='#{disable_with}';this.form.submit();#{options["onclick"]}"
  end
    
  tag :input, { "type" => "submit", "name" => "commit", "value" => value }.update(options.stringify_keys)
end
text_area_tag(name, content = nil, options = {})

Creates a text input area.

Options:

  • :size - A string specifying the dimensions of the textarea.

    # Outputs <textarea name="body" id="body" cols="25" rows="10"></textarea>
    <%= text_area_tag "body", nil, :size => "25x10" %>
# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 131
def text_area_tag(name, content = nil, options = {})
  options.stringify_keys!

  if size = options.delete("size")
    options["cols"], options["rows"] = size.split("x")
  end

  content_tag :textarea, content, { "name" => name, "id" => name }.update(options.stringify_keys)
end
text_field_tag(name, value = nil, options = {})

Creates a standard text field.

Options:

  • :disabled - If set to true, the user will not be able to use this input.

  • :size - The number of visible characters that will fit in the input.

  • :maxlength - The maximum number of characters that the browser will allow the user to enter.

A hash of standard HTML options for the tag.

# File rails/actionpack/lib/action_view/helpers/form_tag_helper.rb, line 93
def text_field_tag(name, value = nil, options = {})
  tag :input, { "type" => "text", "name" => name, "id" => name, "value" => value }.update(options.stringify_keys)
end