【发布时间】:2015-10-25 20:31:52
【问题描述】:
我在客户端使用 tsjzt:http://pellepim.bitbucket.org/jstz/ 来获取我存储在我的用户对象中的当前用户时区。
这很好用,给了我像“欧洲/伦敦”这样的时区。我想验证何时将其传递到模型中,以防发生不好的事情。
所以我发现了这个问题: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 是“欧洲/伦敦”时,它们都无法通过验证,而这显然是一个有效的时区!
这个时区验证我做错了什么,我该如何解决?
【问题讨论】:
-
It doesn't look like "Europe/London" 在该映射类中得到明确支持。然而,伦敦是。
-
如果您查看 ActiveSupport::TimeZone.zones_map 的输出,您会看到包含“Europe/London”的输出 - 这就是我想将我输入的字段与...进行比较的...我只是不知道怎么样!
标签: ruby-on-rails ruby validation datetime ruby-on-rails-4