我正在从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中运行
答案 0 :(得分:2)
我终于找到了解决方案。在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后开始工作。
对此答案的任何疑问/疑问都将不胜感激。