In Ruby when an object is cloned the newly created object is
initialized via #initialize_copy. Only new objects are initialized via
#initialize.
Currently ActiveRecord::Base overrides #clone and creates clones using
#new. This means newly cloned objects are initialized via a
combination of #clone and #initialize instead of via #initialize_copy.
Is the Rails core group interested in seeing a patch which removes the
ActiveRecord#clone method and instead implements cloning by defining
an #initialize_copy method?
Doing so would make implementing application specific deep cloning
much easier as classes can simply define their own #initialize_copy
method.
Wasn't some of the stuff is AR::Base#clone fixed to handle issues with
attribute copying or initializers? I think I remember something like 3
years ago.. but I'm too lazy to search.
My feeling is that AR::Base#clone does was 99% of developers expect it
to do. Any deep copying that happens usually ends up in a unique
method on the class a la 'object.deep_copy'. I support the idea of
the change, I just worry that it might be more work than its worth.