rails 4-1 error:ThreadSafe :: Cache的未定义方法`map'

时间:2014-03-30 18:51:32

标签: ruby-on-rails activerecord ruby-on-rails-4

我刚刚更新到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 }

为什么会发生这种情况以及解决问题的最佳方法是什么?

感谢您的帮助

2 个答案:

答案 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