以下代码确保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
属性的有效值?
答案 0 :(得分:22)
尝试添加.keys
?
validates :time_zone,
inclusion: {
in: ActiveSupport::TimeZone.zones_map.keys
}
答案 1 :(得分:2)
在 Rails 5 中,ActiveSupport::TimeZone.zones_map
是一种私有方法。因此,如果您希望验证有效,我建议使用以下语法:
validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) }
答案 2 :(得分:1)
如果您想继续使用validates_inclusion_of
,这也有效:
validates_inclusion_of :time_zone,
:in => ActiveSupport::TimeZone.zones_map(&:name).keys,
:message => "is not a valid time zone"