A FormBuilder object is associated
with a particular model object and allows you to generate fields associated
with the model object. The FormBuilder object is yielded when
using form_for or fields_for. For example:
<%= form_for @person do |person_form| %> Name: <%= person_form.text_field :name %> Admin: <%= person_form.check_box :admin %> <% end %>
In the above block, the a FormBuilder object is yielded as the
person_form variable. This allows you to generate the
text_field and check_box fields by specifying
their eponymous methods, which modify the underlying template and
associates the +@person+ model object with the form.
The FormBuilder object can be thought of as serving as a proxy
for the methods in the FormHelper module. This class, however,
allows you to call methods with the model object you are building the form
for.
You can create your own custom FormBuilder templates by subclassing this class. For example:
class MyFormBuilder < ActionView::Helpers::FormBuilder
def div_radio_button(method, tag_value, options = {})
@template.content_tag(:div,
@template.radio_button(
@object_name, method, tag_value, objectify_options(options)
)
)
endThe above code creates a new method div_radio_button which
wraps a div around the a new radio button. Note that when options are
passed in, you must called objectify_options in order for the
model object to get correctly passed to the method. If
objectify_options is not called, then the newly created helper
will not be linked back to the model.
The div_radio_button code from above can now be used as
follows:
<%= form_for @person, :builder => MyFormBuilder do |f| %> I am a child: <%= f.div_radio_button(:admin, "child") %> I am an adult: <%= f.div_radio_button(:admin, "adult") %> <% end -%>
The standard set of helper methods for form building are located in the
field_helpers class attribute.