Rails time_zone_select使用“官方”时区值

时间:2016-12-07 12:51:50

标签: javascript ruby-on-rails

我的观点(haml):

= f.time_zone_select :time_zone, nil, {}, class: 'form-control'

呈现给:

...
<option value="Ljubljana">(GMT+01:00) Ljubljana</option>
<option value="Madrid">(GMT+01:00) Madrid</option>
<option value="Paris">(GMT+01:00) Paris</option>
<option value="Prague">(GMT+01:00) Prague</option>
...

创建记录时,我想将:time_zone属性设置为用户的当前时区。有几种方法可以做到这一点,但经过研究,我发现了gem timezone_local或JS库jstz最常见的方法。 无论哪种方式,所有这些开源库似乎都使用与rails不同的模式,例如巴黎时区定义为:

  

欧洲/巴黎

但是,Rails中的TimeZone对象使用

  

巴黎

当我想用用户的当前时区创建记录时,这会导致不一致,因为它不匹配。我需要使用rails来使用与jstz相同的模式,反之亦然,但我不希望gsub字符串在这里或类似。 这里最好的方法是什么?

1 个答案:

答案 0 :(得分:0)

您可以使用Draper来修改{% for int in result.results %} Interfaces: Interface-{{ int.item }} Data: {{ int.stdout }} {% endfor %} allname使用的列表和值方法):

time_zone_select

然后在标签中使用class TimeZoneDecorator < Draper::Decorator decorates ActiveSupport::TimeZone delegate_all def self.all TimeZoneDecorator.decorate_collection(ActiveSupport::TimeZone.all) end def self.us_zones TimeZoneDecorator.decorate_collection(ActiveSupport::TimeZone.us_zones) end # other custom collection methods def name tzinfo.name # "Europe/Paris" instead of "Paris" end end 选项:

model