public Method

FormOptionsHelper.options_for_select(container, selected = nil)

Accepts a container (hash, array, enumerable, your type) and returns a string of option tags. Given a container where the elements respond to first and last (such as a two-element array), the "lasts" serve as option values and the "firsts" as option text. Hashes are turned into this form automatically, so the keys become "firsts" and values become lasts. If selected is specified, the matching "last" or element will get the selected option-tag. Selected may also be an array of values to be selected when using a multiple select.

Examples (call, result):

options_for_select([["Dollar", "$"], ["Kroner", "DKK"]])
  <option value="$">Dollar</option>\n<option value="DKK">Kroner</option>

options_for_select([ "VISA", "MasterCard" ], "MasterCard")
  <option>VISA</option>\n<option selected="selected">MasterCard</option>

options_for_select({ "Basic" => "$20", "Plus" => "$40" }, "$40")
  <option value="$20">Basic</option>\n<option selected="selected" value="$40">Plus</option>

options_for_select([ "VISA", "MasterCard", "Discover" ], ["VISA", "Discover"])
  <option selected="selected">VISA</option>\n<option>MasterCard</option>\n<option selected="selected">Discover</option>

NOTE: Only the option tags are returned, you have to wrap this call in a regular HTML select tag.

Source Code

# File action_view/helpers/form_options_helper.rb, line 169
def options_for_select(container, selected = nil)
  container = container.to_a if Hash === container

  options_for_select = container.inject([]) do |options, element|
    text, value = option_text_and_value(element)
    selected_attribute = ' selected="selected"' if option_value_selected?(value, selected)
    options << %(<option value="#{html_escape(value.to_s)}"#{selected_attribute}>#{html_escape(text.to_s)}</option>)
  end

  options_for_select.join("\n")
end
Comments

Have your say
Please use Textile formatting (click here for a cheat sheet). Use <code/> and <pre/> for code samples.
Click here to login with OpenID to to post comments.