繁体   English   中英

如何使simple_form时区的值对postgres有效

[英]How do you make simple_form timezone have values which are valid for postgres

在SimpleForm中,您可以创建时区输入:

= simple_form_for @user do |f|
  = f.input :time_zone, label: 'My time zone'

但是,简单形式放入表单的值对Postgres无效:

<option value="American Samoa">(GMT-11:00) American Samoa</option>
<option value="International Date Line West">(GMT-11:00) International Date Line West</option>
<option value="Midway Island">(GMT-11:00) Midway Island</option>
<option value="Hawaii">(GMT-10:00) Hawaii</option>
<option value="Alaska">(GMT-09:00) Alaska</option>
<option value="Pacific Time (US &amp; Canada)">(GMT-08:00) Pacific Time (US &amp; Canada)</option>
<option value="Tijuana">(GMT-08:00) Tijuana</option>
...

实际值需要与哈希对应:

{"International Date Line West" => "Pacific/Midway", 
"Midway Island" => "Pacific/Midway", 
"American Samoa" => "Pacific/Pago_Pago", 
"Hawaii" => "Pacific/Honolulu", 
"Alaska" => "America/Juneau", 
"Pacific Time (US & Canada)" => "America/Los_Angeles", 
"Tijuana" => "America/Tijuana",
...}

如何获取simple_form time_zone字段的值以更正的“区域/位置”格式?

Rails时区是标准TZDB的过度简化。 如果可以避免使用它们,那么我将使用完整的IANA TZDB区域。 在Ruby中,使用TZInfo Gem最简单。

如果您坚持使用它们,则可以使用ActiveSupport::TimeZoneMAPPING常量,如这些文档中所示。 这样,您就可以将Rails标识符关联回正常的区域/位置格式。

另请参阅有关Rails时区的时区标签Wiki底部的部分。

您可以尝试以下技巧:

f.input :time_zone, model: TZInfo::Timezone

但这不会根据需要呈现选项名称,只会呈现值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM