Method: ActionView::Helpers::FormOptionsHelper#time_zone_options_for_select

Defined in:
lib/action_view/helpers/form_options_helper.rb

#time_zone_options_for_select(selected = nil, priority_zones = nil, model = ::ActiveSupport::TimeZone) ⇒ Object

Returns a string of option tags for pretty much any time zone in the world. Supply a ActiveSupport::TimeZone name as selected to have it marked as the selected option tag. You can also supply an array of ActiveSupport::TimeZone objects as priority_zones, so that they will be listed above the rest of the (long) list. (You can use ActiveSupport::TimeZone.us_zones as a convenience for obtaining a list of the US time zones, or a Regexp to select the zones of your choice)

The selected parameter must be either nil, or a string that names a ActiveSupport::TimeZone.

By default, model is the ActiveSupport::TimeZone constant (which can be obtained in Active Record as a value object). The only requirement is that the model parameter be an object that responds to all, and returns an array of objects that represent time zones.

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



480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
# File 'lib/action_view/helpers/form_options_helper.rb', line 480

def time_zone_options_for_select(selected = nil, priority_zones = nil, model = ::ActiveSupport::TimeZone)
  zone_options = ""

  zones = model.all
  convert_zones = lambda { |list| list.map { |z| [ z.to_s, z.name ] } }

  if priority_zones
   if priority_zones.is_a?(Regexp)
      priority_zones = model.all.find_all {|z| z =~ priority_zones}
   end
    zone_options += options_for_select(convert_zones[priority_zones], selected)
    zone_options += "<option value=\"\" disabled=\"disabled\">-------------</option>\n"

    zones = zones.reject { |z| priority_zones.include?( z ) }
  end

  zone_options += options_for_select(convert_zones[zones], selected)
  zone_options.html_safe
end