ruby-on-rails - 你如何使 simple_form timezone 具有对 postgres 有效的值

标签 ruby-on-rails postgresql timezone simple-form

在 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::TimeZone 中的 MAPPING 常量,如图所示 in these docs .这将使您能够将 Rails 标识符关联回正常的区域/位置格式。

另请参阅 timezone tag wiki 底部的部分on Rails 时区。

关于ruby-on-rails - 你如何使 simple_form timezone 具有对 postgres 有效的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20035103/

相关文章:

mysql - 显式组和具有 `groupdate` gem 的having子句

ruby-on-rails - Rails 不同的用户记录,按时间排序

javascript - 将 UTC 日期时间转换为本地日期时间

ruby-on-rails - 验证时 Mechanize 405 错误

ruby-on-rails - 对每个用户角色使用 RSpec 进行重复测试描述

postgresql - 在 Ubuntu 上移动 postgres 数据文件夹

postgresql - 如何找到我的 Postgresql 用户名和密码?

python - 动态添加group by子句到sql alchemy

c# - noda-time 适用于这种情况吗?

java - 将日期转换为东部时间-获取日期对象作为输出