在Rails 4.1中,validates_inclusion_of不再一样吗?

以下代码确保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或symbol,并且必须作为配置哈希的in(或:within)选项提供

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

尝试添加.keys

 validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.zones_map.keys } 

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

 validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.all.map(&:name) } 

如果您想继续使用validates_inclusion_of这也有效:

 validates_inclusion_of :time_zone, :in => ActiveSupport::TimeZone.zones_map(&:name).keys, :message => "is not a valid time zone"