Добавьте это где-нибудь в / lib.Например, clone_deep.rb.
module CloneDeep
def clone_deep
kopy = clone
self.class.reflect_on_all_associations.each do |association|
next if association.macro == :belongs_to
cloned_object = case association.macro
when :has_many
self.send(association.name).collect { |item| item.clone_deep }
when :has_one
self.send(association.name) && self.send(association.name).clone_deep
else
clone
end
kopy.send("#{association.name}=", cloned_object)
end
return kopy
end
end
Создать новый инициализатор в папке config / initializers /.Внутри этого файла вставьте
ActiveRecord::Base.send(:include, CloneDeep)
Теперь вы можете клонировать модель со всеми ее ассоциациями has_one и hos_many.
cloned_person = person.clone_deep
cloned_person.save