def move_old_collection_to_new_collection
@old_collection = CollectionOne.find(params[:collectionone_id])
@new_collection = CollectionTwo.find(params[:collectiontwo_id])
record_types_of_join_tables = ['organization', 'event', 'program', 'person', 'project']
#ex. moving CollectionOneEvent join records to CollectionTwoEvent and so on
for rt in record_types_of_join_tables
collection_record_type = eval "CollectionOne#{rt.capitalize}.find(:all, :conditions => ['collection_id = ?', #{@old_collection.id}])"
unless collection_record_type.empty?
for c in collection_record_type
record_id = eval "c." + "#{rt}" + "_id"
collection2_record_type = eval "CollectionTwo#{rt.capitalize}.find(:all, :conditions => ['collection_id = ? AND #{rt}_id = ?', #{@new_collection.id}, #{record_id}])"
if collection2_record_type.empty?
move_collection_record_to_new_collection = eval "CollectionTwo#{rt.capitalize}.new(:collection_id => #{@new_collection.id}, " + ":" + "#{rt}_id => #{record_id})"
if move_collection_record_to_new_collection.save!
puts "Logging results here"
end
end
end
end
end
end
Refactorings
No refactoring yet !
Adam
September 24, 2009, September 24, 2009 21:19, permalink
I think you may want to rethink what you are doing completely. But in keeping with what you already have, I think this accomplishes the same. Assuming you have the appropriate associations defined on the Collection(One|Two) classes, of course.
def move_old_collection_to_new_collection
source = CollectionOne.find(params[:collectionone_id])
destination = CollectionTwo.find(params[:collectiontwo_id])
%w(organizations events programs people projects).each do |association|
source.send(association).each do |object|
destination.send(association).create!(object.attributes)
end
end
end
This is my first post. I'm moving data from one set of collections with join tables to a new set. I'm not sure if there's a better way, but here's my first take at it. i'm checking for duplicates as well.