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

时间:2015-11-05 08:37:21

标签: mysql ruby-on-rails json ruby-on-rails-4.2

我正在从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中运行

1 个答案:

答案 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后开始工作。

对此答案的任何疑问/疑问都将不胜感激。