aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib
diff options
context:
space:
mode:
Diffstat (limited to 'actionpack/lib')
-rw-r--r--actionpack/lib/action_view/helpers/form_options_helper.rb4
-rw-r--r--actionpack/lib/action_view/helpers/tags.rb1
-rw-r--r--actionpack/lib/action_view/helpers/tags/collection_check_boxes.rb30
3 files changed, 35 insertions, 0 deletions
diff --git a/actionpack/lib/action_view/helpers/form_options_helper.rb b/actionpack/lib/action_view/helpers/form_options_helper.rb
index 5ca2f2abdc..96519a7428 100644
--- a/actionpack/lib/action_view/helpers/form_options_helper.rb
+++ b/actionpack/lib/action_view/helpers/form_options_helper.rb
@@ -195,6 +195,10 @@ module ActionView
Tags::CollectionRadioButtons.new(object, method, self, collection, value_method, text_method, options, html_options).render(&block)
end
+ def collection_check_boxes(object, method, collection, value_method, text_method, options = {}, html_options = {}, &block)
+ Tags::CollectionCheckBoxes.new(object, method, self, collection, value_method, text_method, options, html_options).render(&block)
+ end
+
# Returns <tt><select></tt>, <tt><optgroup></tt> and <tt><option></tt> tags for the collection of existing return values of
# +method+ for +object+'s class. The value returned from calling +method+ on the instance +object+ will
# be selected. If calling +method+ returns +nil+, no selection is made without including <tt>:prompt</tt>
diff --git a/actionpack/lib/action_view/helpers/tags.rb b/actionpack/lib/action_view/helpers/tags.rb
index fa19cf2dba..c480799fe3 100644
--- a/actionpack/lib/action_view/helpers/tags.rb
+++ b/actionpack/lib/action_view/helpers/tags.rb
@@ -5,6 +5,7 @@ module ActionView
autoload :Base
autoload :CheckBox
+ autoload :CollectionCheckBoxes
autoload :CollectionRadioButtons
autoload :CollectionSelect
autoload :DateSelect
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