diff options
Diffstat (limited to 'actionpack/lib/action_view/helpers/tags/collection_check_boxes.rb')
-rw-r--r-- | actionpack/lib/action_view/helpers/tags/collection_check_boxes.rb | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/actionpack/lib/action_view/helpers/tags/collection_check_boxes.rb b/actionpack/lib/action_view/helpers/tags/collection_check_boxes.rb new file mode 100644 index 0000000000..d8f7a1fff6 --- /dev/null +++ b/actionpack/lib/action_view/helpers/tags/collection_check_boxes.rb @@ -0,0 +1,30 @@ +module ActionView + module Helpers + module Tags + class CollectionCheckBoxes < CollectionRadioButtons + delegate :check_box, :label, :to => :@template_object + + def render + rendered_collection = render_collection( + @method_name, @collection, @value_method, @text_method, @options, @html_options + ) do |value, text, default_html_options| + default_html_options[:multiple] = true + + if block_given? + yield sanitize_attribute_name(@method_name, value), text, value, default_html_options + else + check_box(@object_name, @method_name, default_html_options, value, nil) + + label(@object_name, sanitize_attribute_name(@method_name, value), text, :class => "collection_check_boxes") + end + end + + # Prepend a hidden field to make sure something will be sent back to the + # server if all checkboxes are unchecked. + hidden = @template_object.hidden_field_tag("#{@object_name}[#{@method_name}][]", "", :id => nil) + + wrap_rendered_collection(rendered_collection + hidden, @options) + end + end + end + end +end |