7

以下代码确保time_zone选择在时区内ActiveSupport::TimeZone.us_zones

validates_inclusion_of :time_zone, in: ActiveSupport::TimeZone.zones_map(&:name)

在 Rails 4.0 中运行良好。刚刚升级到 Rails 4.1,我在我的索引页面上收到了这个错误(所以只是简单地查看模型):

具有#include 方法的对象?或需要 proc、lambda 或符号,并且必须作为配置哈希的 :in(或 :within)选项提供

我从中猜测,ActiveSupport::TimeZone.zones_map(&:name)不再是该属性的有效值in

4

3 回答 3

22

尝试添加.keys

validates :time_zone, 
  inclusion: { 
    in: ActiveSupport::TimeZone.zones_map.keys 
  } 
于 2014-04-09T00:37:51.973 回答
2

Rails 5中,ActiveSupport::TimeZone.zones_map是一个私有方法。因此,如果您希望验证正常工作,我建议使用以下语法:

validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) }
于 2017-01-03T08:00:55.563 回答
1

如果您想继续使用validates_inclusion_of它也可以:

validates_inclusion_of :time_zone, 
   :in => ActiveSupport::TimeZone.zones_map(&:name).keys, 
   :message => "is not a valid time zone"
于 2014-04-14T20:17:06.837 回答