Forum: Ruby on Rails ActiveRecord handling of obj.dup vs obj.clone

Announcement (2017-05-07): is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see and for other Rails- und Ruby-related community platforms.
daudi (Guest)
on 2009-01-09 11:33
(Received via mailing list)
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
This topic is locked and can not be replied to.