ActiveRecord handling of obj.dup vs obj.clone

AR seems to be handling model object dup and cloning differently from
Ruby documented behavior. I’ve checked out both ways (as an AR model
and not) and the behavior is different. I don’t see anything in the
RAILS documentation about this. Am I missing something? is this a
bug? a feature? an interesting lifestyle?
I can hack around this difference but it is not elegant.

example 1 using AR:

class Model < ActiveRecord::Base

etc, normal model stuff, associations

def initialize_copy(old_obj)
# do something

obj = Model.find(1)
obj_dup = obj.dup # does NOT yield a new object; does invoke

at this point obj_dup is same object as obj; any changes to obj_dup

will change obj

but obj_dup changes have not been saved to DB yet

obj_clone = obj.clone # does yield a new object; does NOT invoke

at this point obj_clone is a different object but not yet saved to


example 2 using pure Ruby:

class Test
attr_reader :name
def initialize(str)
@name = str
def initialize_copy(old)
@name += ’ *** COPY ***’

a = ‘john’ # is now: ‘john’
b = a.dup # is now: ‘john *** COPY ***’
c = a.clone # is now: ‘john *** COPY ***’

a, b, c are all DIFFERENT objects

b.initialize_copy(a) was invoked per Ruby documentation

c.initialize_copy(a) was invoked per Ruby documentation