aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack/lib/action_view/helpers
diff options
context:
space:
mode:
authorVasiliy Ermolovich <younash@gmail.com>2012-02-21 19:46:49 +0300
committerVasiliy Ermolovich <younash@gmail.com>2012-02-21 19:54:16 +0300
commit9dd64f2e0c1b3ce85b503b0f81c50c93f89ffbcd (patch)
treeddff9c038622c0e7523f148265aab68c5d7f7099 /actionpack/lib/action_view/helpers
parent67a5157974ed9809570e2b29b69b59b85a4c7c52 (diff)
downloadrails-9dd64f2e0c1b3ce85b503b0f81c50c93f89ffbcd.tar.gz
rails-9dd64f2e0c1b3ce85b503b0f81c50c93f89ffbcd.tar.bz2
rails-9dd64f2e0c1b3ce85b503b0f81c50c93f89ffbcd.zip
refactor time_zone_options_for_select
BTW, select works quite faster then find_all: require 'benchmark' n = [1]*100_000_000 Benchmark.bm do |x| x.report { n.select { |a| a > 1 } } x.report { n.find_all { |a| a > 1 } } end user system total real 7.590000 0.010000 7.600000 ( 7.927171) 9.650000 0.010000 9.660000 ( 9.634406)
Diffstat (limited to 'actionpack/lib/action_view/helpers')
-rw-r--r--actionpack/lib/action_view/helpers/form_options_helper.rb15
1 files changed, 8 insertions, 7 deletions
diff --git a/actionpack/lib/action_view/helpers/form_options_helper.rb b/actionpack/lib/action_view/helpers/form_options_helper.rb
index abb548c276..70cc6906cd 100644
--- a/actionpack/lib/action_view/helpers/form_options_helper.rb
+++ b/actionpack/lib/action_view/helpers/form_options_helper.rb
@@ -506,23 +506,24 @@ module ActionView
# NOTE: Only the option tags are returned, you have to wrap this call in
# a regular HTML select tag.
def time_zone_options_for_select(selected = nil, priority_zones = nil, model = ::ActiveSupport::TimeZone)
- zone_options = ""
+ zone_options = "".html_safe
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}
+ priority_zones = zones.select { |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 ) }
+ zone_options.safe_concat options_for_select(convert_zones[priority_zones], selected)
+ zone_options.safe_concat content_tag(:option, '-------------', :value => '', :disabled => 'disabled')
+ zone_options.safe_concat "\n"
+
+ zones.reject! { |z| priority_zones.include?(z) }
end
- zone_options += options_for_select(convert_zones[zones], selected)
- zone_options.html_safe
+ zone_options.safe_concat options_for_select(convert_zones[zones], selected)
end
# Returns radio button tags for the collection of existing return values