I am using the Marshal module to create a deep clone of an
ActiveRecord object hierarchy… i.e. an object that has_many
children, which at their turn may have many children, etc.
In model file of the root object I have the following method:
def deep_clone()
aClone = Marshal::load(Marshal.dump(self))
return aClone
end
This works fine, the returned clone contains the same has_many
hierarchy as the original…
However, it also copies the value of the “id” attribute for each of
the cloned objects in the hierarchy… if I were to save it (e.g.
aClone.save), I am effectively updating the same database record as the
original.
Question: what’s the best way to turn these cloned objects in the
hierarchy into a new ActiveRecords such that upon save of the root
object, the root and all it’s children in hierarchy get created as a set
of new records and the children of the cloned object correctly point to
their parents ?
Is it just a matter of setting the “@new_record” attribute to “true” for
each of the cloned objects in the hierarchy, after I called the clone
method ?
Thanks,