我正在使用tsjzt: http://pellepim.bitbucket.org/jstz/ 来获取客户端的时区,并将其存储在我的用户对象中。这很好用,可以给我像“Europe/London”这样的时区。当这个时区传递到模型中时,我想验证它是否是有效的时区,以防发生意外情况。因此,我找到了这个问题:Issue validating user time zone for Rails app on Heroku,并尝试了这个验证方法:
validates_inclusion_of :timezone, :in => { in: ActiveSupport::TimeZone.zones_map(&:name) }
然而,名称与tzinfo不同。我认为我的客户端检测到的时区字符串"Europe/London"本质上是TimeZone类中的TimeZone映射的值组件,而不是名称 - 在这种情况下将设置为"London"。
因此,我尝试了以下方法:
validates_inclusion_of :timezone, :in => { in: ActiveSupport::TimeZone.zones_map(&:tzinfo) }
在其他SO问题的原始答案或我修改后的答案中使用:tzinfo
时,两者都无法通过验证,当:timezone为"Europe/London"时,显然这是一个有效的时区!
我在时区验证方面做错了什么,如何修复?