Ruby on rails 使用时区保存整数

Ruby on rails 使用时区保存整数,ruby-on-rails,ruby,ruby-on-rails-3,timezone,railscasts,Ruby On Rails,Ruby,Ruby On Rails 3,Timezone,Railscasts,我在跟踪这里发现的时区的铁路记录- 下面是我用于时区选择输入的内容。当前表单在数据库中保存一个字符串值(即“阿拉斯加”)。相反,我希望将UTC偏移量保存为整数。我该怎么做呢 <%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones 您有两个选项,可以使用select或创建虚拟属性。我可能更喜欢后者 由于时区不会直接以小时为单位(仅以秒或字符串为单位)提供偏移量,因此不能直接使用collection\u sele

我在跟踪这里发现的时区的铁路记录-

下面是我用于时区选择输入的内容。当前表单在数据库中保存一个字符串值(即“阿拉斯加”)。相反,我希望将UTC偏移量保存为整数。我该怎么做呢

<%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones

您有两个选项,可以使用select或创建虚拟属性。我可能更喜欢后者

由于时区不会直接以小时为单位(仅以秒或字符串为单位)提供偏移量,因此不能直接使用collection\u select,但可以这样使用select(utc\u偏移量以秒为单位):

如果使用虚拟属性,请使用已使用的代码,但使用:time\u zone\u name而不是:time\u zone,然后更新模型,如下所示:

def time_zone_name=(value)
  time_zone = ActiveSupport::TimeZone.new(value).utc_offset / 1.hour
end

def time_zone_name
  # time_zone is a number like -9
  ActiveSupport::TimeZone.new(time_zone).name
end

我更喜欢最后一个选项,因为它允许您通过偏移量或名称设置时区,甚至可以从rails控制台或您希望设置时区的任何位置进行设置。

时区与偏移量不是一对一的。他希望将UTC偏移量保存在数据库中。他希望用户选择时区。或者你没有读过这个问题吗?注意,世界上有些地方需要3.5小时(加拿大的一个地方f.e.)
def time_zone_name=(value)
  time_zone = ActiveSupport::TimeZone.new(value).utc_offset / 1.hour
end

def time_zone_name
  # time_zone is a number like -9
  ActiveSupport::TimeZone.new(time_zone).name
end