我有一个Entry
类,它有一个Charge
属性,我想在从DB读取时从字符串示例化为Charge
对象:
class Entry < ActiveRecord::Base
serialize :charge, Charge
end
class Charge
# Reading from the db as a string
def self.load(str)
str.nil? ? nil : new(str)
end
# Writing to the db as a string
def self.dump(chg)
chg.nil? ? nil : chg.to_s
end
end
字符串
这很好用:
ent = Entry.find(1)
ent.charge.class => Charge
型
然而,AR正在发布一个弃用警告:
取消预订:不推荐将编码器作为位置参数传递,并将在Rails 7.2中删除。请将编码器作为关键字参数传递:
serialize:charge,coder:Byr::Charge
但是当我这样做时,AR无法将属性转换为Charge,而是将其作为String从DB返回。
class Entry < ActiveRecord::Base
serialize :charge, coder: Charge
end
ent = Entry.find(1)
ent.charge.class => String
的字符串
是我漏了什么吗,还是其他人看到了?
1条答案
按热度按时间uoifb46i1#
为了确保序列化属性
charge
属于Charge
类,需要在序列化器调用中指定:type
参数。此外,nil
时,load
方法应该返回一个新的空对象。方法签名中的更改允许您定义单独的编码器和类型类。这样,您的代码可以使用某个类加载/转储,并使属性属于不同的类。
字符串
有关详细信息,请参阅: