diff options
Diffstat (limited to 'actionpack/lib/action_view/helpers/tags/select.rb')
-rw-r--r-- | actionpack/lib/action_view/helpers/tags/select.rb | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/actionpack/lib/action_view/helpers/tags/select.rb b/actionpack/lib/action_view/helpers/tags/select.rb new file mode 100644 index 0000000000..71fd4d04b7 --- /dev/null +++ b/actionpack/lib/action_view/helpers/tags/select.rb @@ -0,0 +1,31 @@ +module ActionView + module Helpers + module Tags + class Select < Base #:nodoc: + def initialize(object_name, method_name, template_object, choices, options, html_options) + @choices = choices + @html_options = html_options + + super(object_name, method_name, template_object, options) + end + + def render + selected_value = @options.has_key?(:selected) ? @options[:selected] : value(@object) + + # Grouped choices look like this: + # + # [nil, []] + # { nil => [] } + # + if !@choices.empty? && @choices.first.respond_to?(:last) && Array === @choices.first.last + option_tags = grouped_options_for_select(@choices, :selected => selected_value, :disabled => @options[:disabled]) + else + option_tags = options_for_select(@choices, :selected => selected_value, :disabled => @options[:disabled]) + end + + select_content_tag(option_tags, @options, @html_options) + end + end + end + end +end |