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

at.*_*at. 7 ruby ruby-on-rails activesupport ruby-on-rails-4 ruby-on-rails-4.1

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

validates_inclusion_of :time_zone, in: ActiveSupport::TimeZone.zones_map(&:name)
Run Code Online (Sandbox Code Playgroud)

在Rails 4.0中工作得很好.刚刚升级到Rails 4.1,我在索引页面上出现了这个错误(所以只需查看模型):

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

我猜测,ActiveSupport::TimeZone.zones_map(&:name)不再是该in物业的有效价值?

hou*_*se9 22

尝试添加.keys

validates :time_zone, 
  inclusion: { 
    in: ActiveSupport::TimeZone.zones_map.keys 
  } 
Run Code Online (Sandbox Code Playgroud)

  • 块参数`&:name`与4.1实现无关.zones_map返回一个ThreadSafe :: Cache对象,它不是一个哈希值.它不支持#include?方法作为确定密钥是否存在的方法.4.1中的`ActiveSupport :: TimeZone.zones_map.keys`就足够了. (8认同)