我正在按照此处找到的时区跟踪广播 - http://railscasts.com/episodes/106-time-zones-revised
以下是我用于时区选择输入的内容。目前,表单在数据库中保存字符串值(即“阿拉斯加”)。相反,我想将UTC偏移量保存为整数。我该怎么做呢?
<%= f.time_zone_select :time_zone, ActiveSupport::TimeZone.us_zones
答案 0 :(得分:0)
您有两个选项,您可以使用select,也可以创建虚拟属性。我可能更喜欢后一种选择。
由于TimeZone没有直接给你一个小时的偏移量(只有几秒或一个字符串),你不能直接使用collection_select,但你可以使用select这样的(utc_offset以秒为单位):
f.select :time_zone, ActiveSupport::TimeZone.us_zones.map { |z| [z.name, z.utc_offset / 1.hour] }
如果您使用虚拟属性,请使用您已使用的代码,但使用:time_zone_name而不是:time_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控制台或您希望设置它的任何地方设置。