instance method
grouped_options_for_select
Ruby on Rails 4.0.13
Since v2.3.18Signature
grouped_options_for_select(grouped_options, selected_key = nil, options = {})
Returns a string of <option> tags, like options_for_select, but wraps them with <optgroup> tags.
Parameters:
-
grouped_options- Accepts a nested array or hash of strings. The first value serves as the<optgroup>label while the second value must be an array of options. The second value can be a nested array of text-value pairs. Seeoptions_for_selectfor more info.Ex. ["North America",[["United States","US"],["Canada","CA"]]]
-
selected_key- A value equal to thevalueattribute for one of the<option>tags, which will have theselectedattribute set. Note: It is possible for this value to match multiple options as you might have the same option in multiple groups. Each will then getselected="selected".
Options:
-
:prompt- set to true or a prompt string. When the select element doesn’t have a value yet, this prepends an option with a generic prompt - “Please select” - or the given prompt string. -
:divider- the divider for the options groups.grouped_options = [
['North America', [['United States','US'],'Canada']], ['Europe', ['Denmark','Germany','France']]
] grouped_options_for_select(grouped_options)
grouped_options = {
'North America' => [['United States','US'], 'Canada'], 'Europe' => ['Denmark','Germany','France']
} grouped_options_for_select(grouped_options)
Possible output:
<optgroup label="North America"> <option value="US">United States</option> <option value="Canada">Canada</option> </optgroup> <optgroup label="Europe"> <option value="Denmark">Denmark</option> <option value="Germany">Germany</option> <option value="France">France</option> </optgroup> grouped_options = [ [['United States','US'], 'Canada'], ['Denmark','Germany','France'] ] grouped_options_for_select(grouped_options, nil, divider: '---------')
Possible output:
<optgroup label="---------"> <option value="US">United States</option> <option value="Canada">Canada</option> </optgroup> <optgroup label="---------"> <option value="Denmark">Denmark</option> <option value="Germany">Germany</option> <option value="France">France</option> </optgroup>
Note: Only the <optgroup> and <option> tags are returned, so you still have to wrap the output in an appropriate <select> tag.
Parameters
-
grouped_optionsreq -
selected_keyopt = nil -
optionsopt = {}
Source
# File actionpack/lib/action_view/helpers/form_options_helper.rb, line 517
def grouped_options_for_select(grouped_options, selected_key = nil, options = {})
if options.is_a?(Hash)
prompt = options[:prompt]
divider = options[:divider]
else
prompt = options
options = {}
message = "Passing the prompt to grouped_options_for_select as an argument is deprecated. " \
"Please use an options hash like `{ prompt: #{prompt.inspect} }`."
ActiveSupport::Deprecation.warn message
end
body = "".html_safe
if prompt
body.safe_concat content_tag(:option, prompt_text(prompt), :value => "")
end
grouped_options.each do |container|
if divider
label = divider
else
label, container = container
end
body.safe_concat content_tag(:optgroup, options_for_select(container, selected_key), :label => label)
end
body
end
Defined in actionpack/lib/action_view/helpers/form_options_helper.rb line 517
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActionView::Helpers::FormOptionsHelper