diff options
author | José Valim <jose.valim@gmail.com> | 2011-07-11 10:25:04 -0700 |
---|---|---|
committer | José Valim <jose.valim@gmail.com> | 2011-07-11 10:25:04 -0700 |
commit | 1939fa3f169e4c44234aef0f336411fc01d0445f (patch) | |
tree | 498fe31d0d12fbdd04d3baeb057970c1674c9251 /actionpack/lib | |
parent | 133a20354ef9872721e3b825daaf8eca686b4d37 (diff) | |
parent | 587dd7d56c1451c1d597535ede27c2163be72e0b (diff) | |
download | rails-1939fa3f169e4c44234aef0f336411fc01d0445f.tar.gz rails-1939fa3f169e4c44234aef0f336411fc01d0445f.tar.bz2 rails-1939fa3f169e4c44234aef0f336411fc01d0445f.zip |
Merge pull request #1722 from AndrewRadev/grouped-select
Make "select" helper handle nested collections
Diffstat (limited to 'actionpack/lib')
-rw-r--r-- | actionpack/lib/action_view/helpers/form_options_helper.rb | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/actionpack/lib/action_view/helpers/form_options_helper.rb b/actionpack/lib/action_view/helpers/form_options_helper.rb index 3dc6d65432..7c43dc04e0 100644 --- a/actionpack/lib/action_view/helpers/form_options_helper.rb +++ b/actionpack/lib/action_view/helpers/form_options_helper.rb @@ -105,7 +105,10 @@ module ActionView # Create a select tag and a series of contained option tags for the provided object and method. # The option currently held by the object will be selected, provided that the object is available. - # See options_for_select for the required format of the choices parameter. + # + # There are two possible formats for the choices parameter, corresponding to other helpers' output: + # * A flat collection: see options_for_select + # * A nested collection: see grouped_options_for_select # # Example with @post.person_id => 1: # select("post", "person_id", Person.all.collect {|p| [ p.name, p.id ] }, { :include_blank => true }) @@ -575,7 +578,14 @@ module ActionView def to_select_tag(choices, options, html_options) selected_value = options.has_key?(:selected) ? options[:selected] : value(object) - select_content_tag(options_for_select(choices, :selected => selected_value, :disabled => options[:disabled]), options, html_options) + + if !choices.empty? && choices.try(:first).try(:second).respond_to?(:each) + 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 def to_collection_select_tag(collection, value_method, text_method, options, html_options) |