我有以下自定义序列化程序:
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。
为什么会这样?
答案 0 :(得分:3)
我通过ActiveRecord序列化类来解决这个问题。
ActiveRecord序列化程序调用{{1}}:
type_cast_from_database
我假设ReportCardDataSerializer永远不必处理nil,但ActiveRecord实际上首先尝试加载nil来测试默认值。