存储访问器问题:无法在Rails 4中的mysql数据库中读取旧的已存储的json对象序列化(哈希)值

我正在从Rails 3.2.8升级我的应用程序到Rails 4.2.4。 对于序列化的表’社论’,我有一个’extras’属性

store :extras, accessors: [:attr1, :attr2, :attr3], coder: JSON #The way it is stored in **Rails 3** is --- :attr1: value :attr2: value :attr3: value #The way it is stored in **Rails 4** is {"attr1":"value", "attr2":"value", "attr3":"value"} 

当我获取我的应用程序在rails 3中时创建的旧记录的问题,它给我带来了错误

 JSON::ParserError: 795: unexpected token at '--- 

但是当我创建新记录时,它正常工作。 还没有任何线索,如何让它在Rails 4中运行

我终于找到了解决方案。 在activerecord 4.2.4中更改了“store accessor”(在问题中提到)实现。 早期(活动记录3.2.8)数据存储在数据库中是YAML格式,它使用“编码器:JSON”,这在activerecord 4.2.4中不是这种情况。

这是代码链接4.2.4 https://github.com/rails/rails/blob/master/activerecord/lib/active_record/store.rb#L85

这是代码链接3.2 https://github.com/rails/rails/blob/3-2-stable/activerecord/lib/active_record/store.rb#L35

现在在4.2.4中,无论是序列化属性中存储的数据是YAML还是JSON,现在为我工作的编码器都是YAML。

因此,在将编码器从JSON更改为YAML后,我的代码开始工作。

如有任何关于此答案的疑问/疑问,将不胜感激。