ActiveRecord序列化为当前属性发送nil到自定义序列化器

时间:2016-05-14 15:51:55

标签: ruby-on-rails activerecord serialization

我有以下自定义序列化程序:

class ReportCardDataSerializer
  def self.dump(hash)
    hash.to_json
  end

  def self.load(json)
    # json.class == NilClass, why????
    hash = (json || {}).with_indifferent_access
  end
end

以下类具有序列化data属性,其数据库列设置为NOT NULL。

class ReportCardGroup < ActiveRecord::Base
  serialize :data, ReportCardDataSerializer # data is PostgreSQL jsonb column
end

ReportCardDataSerializer dump方法按预期工作。但是在尝试load ReportCardDataSerializer load方法时,即使数据库列不是nil,也会发送nil。

为什么会这样?

1 个答案:

答案 0 :(得分:3)

我通过ActiveRecord序列化类来解决这个问题。

ActiveRecord序列化程序调用{​​{1}}:

type_cast_from_database

我假设ReportCardDataSerializer永远不必处理nil,但ActiveRecord实际上首先尝试加载nil来测试默认值。