Scott,
AR overrides clone() to handle shallow copies. As for associations you'll have to handle these yourself. Here is a cut-and-paste from the rails source so you can see the implementation.
module ActiveRecord class Base
# Returns a clone of the record that hasn't been assigned an id yet and # is treated as a new record. Note that this is a "shallow" clone: # it copies the object's attributes only, not its associations. # The extent of a "deep" clone is application-specific and is therefore # left to the application to implement according to its need. def clone attrs = self.attributes_before_type_cast attrs.delete(self.class.primary_key) self.class.new do |record| record.send :instance_variable_set, '@attributes', attrs end end
end end
Hope this helps.