我想制作一个activerecord记录的副本,更改进程中的单个字段(除了id).实现这一目标的最简单方法是什么?
我意识到我可以创建一个新记录,然后遍历每个字段逐个复制数据 - 但我认为必须有一个更简单的方法来做到这一点......
如:
@newrecord=Record.copy(:id) *perhaps?*
Run Code Online (Sandbox Code Playgroud) 您将如何在MongoDB中深入克隆文档(mongoid)
我尝试过这样的事情;
original = Car.find(old_id)
@car = original.clone
@car._id = BSON::ObjectId.new
Run Code Online (Sandbox Code Playgroud)
但是我之后遇到问题的反序列化问题.
如何使用除_id之外的所有文档属性进行深度克隆?
编辑:在遵循Zachary的示例后,我遇到了一些针对重复文档的自定义序列化类的问题.
class OptionHash
include Mongoid::Fields::Serializable
# Convert the keys from Strings to Symbols
def deserialize(object)
object.symbolize_keys!
end
# Convert values into Booleans
def serialize(object)
object.each do |key, value|
object[key] = Boolean::MAPPINGS[value]
end
end
Run Code Online (Sandbox Code Playgroud)
对于重复文档,对象为零.Car.find(old_id).attributes确实不包含自定义序列化的字段,为什么会这样,我该如何包含它?