我已经定义了一个自定义序列化器
class CustomSerializer
def self.dump(obj)
obj.to_h
end
def self.load(obj)
CustomClass.new(obj)
end
end
并在活动记录模型中使用
class Klass < ActiveRecord::Base
serialize :my_column, CustomSerializer
end
现在,当使用Klass k = Klass.first
的对象时,我总是看到k.changed? = true
我了解这是由于我定义的序列化程序引入的类引用
k.my_column_was # #<CustomClass:0x00007fd9063d6288>
k.my_column # #<CustomClass:0x00007fd9080d9088>
如何解决此问题?
答案 0 :(得分:1)
Rails 5 Attributes API将使您能够操纵dirty tracking的处理方式。
这是用于域特定序列化的推荐方法。
对于更复杂的情况,例如与应用程序域对象之间的转换,请考虑使用ActiveRecord :: Attributes API。
对于Rails <5,不幸的是,文档指出:
序列化属性的显着副作用是,即使每次保存时模型都不会变脏,该模型也会进行更新。
您偶然发现了什么