Module: SimpleFormWithClientValidation::ActionViewExtensions::Builder

Included in:
ActionView::Helpers::FormBuilder
Defined in:
lib/simple_form_with_client_validation/action_view_extensions/builder.rb

Overview

A collection of methods required by simple_form but added to rails default form. This means that you can use such methods outside simple_form context.

Instance Method Summary collapse

Instance Method Details

#collection_check_boxes(attribute, collection, value_method, text_method, options = {}, html_options = {}) ⇒ Object

Creates a collection of check boxes for each item in the collection, associated with a clickable label. Use value_method and text_method to convert items in the collection for use as text/value in check boxes. You can give a symbol or a proc to both value_method and text_method, that will be evaluated for each item in the collection.

Examples

form_for @user do |f|
f.collection_check_boxes :options, [[true, 'Yes'] ,[false, 'No']], :first, :last
end

It is also possible to give a block that should generate the check box + label. To wrap the check box with the label, for instance:

form_for @user do |f|
f.collection_check_boxes(
  :options, [[true, 'Yes'] ,[false, 'No']], :first, :last
) do |b|
  b.label { b.check_box + b.text }
end
end

Options

Collection check box accepts some extra options:

  • checked => the value or values that should be checked initially. Accepts a single item or an array of items. It overrides existing associations.

  • disabled => the value or values that should be disabled. Accepts a single item or an array of items.

  • collection_wrapper_tag => the tag to wrap the entire collection.

  • collection_wrapper_class => the CSS class to use for collection_wrapper_tag

  • item_wrapper_tag => the tag to wrap each item in the collection.

  • item_wrapper_class => the CSS class to use for item_wrapper_tag

  • a block => to generate the label + check box or any other component.



157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
# File 'lib/simple_form_with_client_validation/action_view_extensions/builder.rb', line 157

def collection_check_boxes(attribute, collection, value_method, text_method, options={}, html_options={})
  rendered_collection = render_collection(
    collection, value_method, text_method, options, html_options
  ) do |item, value, text, default_html_options|
    default_html_options[:multiple] = true
    builder = instantiate_builder(CheckBoxBuilder, attribute, item, value, text, default_html_options)

    if block_given?
      yield builder
    else
      builder.check_box + builder.label(:class => "collection_check_boxes")
    end
  end

  # Append a hidden field to make sure something will be sent back to the
  # server if all checkboxes are unchecked.
  hidden = template.hidden_field_tag("#{object_name}[#{attribute}][]", "", :id => nil)

  wrap_rendered_collection(rendered_collection + hidden, options)
end

#collection_radio_buttons(attribute, collection, value_method, text_method, options = {}, html_options = {}) ⇒ Object

Create a collection of radio inputs for the attribute. Basically this helper will create a radio input associated with a label for each text/value option in the collection, using value_method and text_method to convert these text/value. You can give a symbol or a proc to both value_method and text_method, that will be evaluated for each item in the collection.

Examples

form_for @user do |f|
f.collection_radio_buttons :options, [[true, 'Yes'] ,[false, 'No']], :first, :last
end

It is also possible to give a block that should generate the radio + label. To wrap the radio with the label, for instance:

form_for @user do |f|
f.collection_radio_buttons(
  :options, [[true, 'Yes'] ,[false, 'No']], :first, :last
) do |b|
  b.label { b.radio_button + b.text }
end
end

Options

Collection radio accepts some extra options:

  • checked => the value that should be checked initially.

  • disabled => the value or values that should be disabled. Accepts a single item or an array of items.

  • collection_wrapper_tag => the tag to wrap the entire collection.

  • collection_wrapper_class => the CSS class to use for collection_wrapper_tag

  • item_wrapper_tag => the tag to wrap each item in the collection.

  • item_wrapper_class => the CSS class to use for item_wrapper_tag

  • a block => to generate the label + radio or any other component.



91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/simple_form_with_client_validation/action_view_extensions/builder.rb', line 91

def collection_radio_buttons(attribute, collection, value_method, text_method, options={}, html_options={})
  rendered_collection = render_collection(
    collection, value_method, text_method, options, html_options
  ) do |item, value, text, default_html_options|
    builder = instantiate_builder(RadioButtonBuilder, attribute, item, value, text, default_html_options)

    if block_given?
      yield builder
    else
      builder.radio_button + builder.label(:class => "collection_radio_buttons")
    end
  end

  wrap_rendered_collection(rendered_collection, options)
end

#simple_fields_for(*args, &block) ⇒ Object

Wrapper for using SimpleFormWithClientValidation inside a default rails form. Example:

form_for @user do |f|
f.simple_fields_for :posts do |posts_form|
  # Here you have all simple_form methods available
  posts_form.input :title
end
end


187
188
189
190
191
192
193
194
195
196
197
# File 'lib/simple_form_with_client_validation/action_view_extensions/builder.rb', line 187

def simple_fields_for(*args, &block)
  options = args.extract_options!
  options[:wrapper] ||= self.options[:wrapper]

  if self.class < ActionView::Helpers::FormBuilder
    options[:builder] ||= self.class
  else
    options[:builder] ||= SimpleFormWithClientValidation::FormBuilder
  end
  fields_for(*(args << options), &block)
end