Don*_*nMB 5 javascript ruby-on-rails
我的观点(哈姆勒):
= f.time_zone_select :time_zone, nil, {}, class: 'form-control'
Run Code Online (Sandbox Code Playgroud)
呈现为:
...
<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>
...
Run Code Online (Sandbox Code Playgroud)
创建记录时,我想将该:time_zone属性设置为用户的当前时区。有几种方法可以做到这一点,但经过研究,我发现最常见的是 gemtimezone_local或 JS 库jstz。无论哪种方式,所有这些开源库似乎都使用与 rails 不同的模式,例如巴黎时区定义为:
欧洲/巴黎
但是,Rails 中的 TimeZone 对象使用
巴黎
当我想用用户的当前时区创建记录时,这会导致不一致,因为它不匹配。我需要 rails 使用相同的模式,jstz反之亦然,但我不想在gsub这里或类似的地方使用字符串。这里最好的方法是什么?
可以使用Draper修改alland name(使用的list和value方法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
Run Code Online (Sandbox Code Playgroud)
然后使用model标签中的选项:
= f.time_zone_select :timezone, TimeZoneDecorator.us_zones, {include_blank: "Set from Lat/Lng", model: TimeZoneDecorator}, {class: 'form-control'}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
631 次 |
| 最近记录: |