存储访问器问题:无法在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后,我的代码开始工作。
如有任何关于此答案的疑问/疑问,将不胜感激。