我刚刚更新到rails-4-1-stable,我遇到以下错误:
NoMethodError: undefined method `map' for #<ThreadSafe::Cache:0x007fca66162668>
错误是由这行代码(在我的用户模型中)引起的,我想在那里设置所有时区进行验证:
validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.zones_map.map{ |el| el.last.name }, allow_nil: true }
为什么会发生这种情况以及解决问题的最佳方法是什么?
感谢您的帮助
答案 0 :(得分:3)
Gary Wright对sjobe's link的评论指出,ActiveSupport::TimeZone.zones_map
的实现在Rails 4.1中已经改变,现在返回一个ThreadSafe::Cache
对象,它没有响应到include?
方法。
你可以用以下方法修复它:
validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.zones_map.keys }
ActiveSupport::TimeZone.zones_map.keys
是一个时区名称数组, 响应include?
方法
答案 1 :(得分:2)
zones_map是一个函数,它已经完成了映射
validates :time_zone, inclusion: { in: ActiveSupport::TimeZone.zones_map{ |el| el.last.name }, allow_nil: true }
将zones_map.map替换为zones_map