2016-07-30 2 views
2

Я использую драгоценный камень квартиры с PostgreSQL, и мне нужно сделать копию уже существующего арендатора с данными. Один из способов, которым я могу думать об одном способе, - собрать все данные у арендатора, а затем переключить арендатора и начать создавать запись. Ниже представлена ​​небольшая демонстрация. Модели - это список моделей, которые нужно скопировать.Сделайте копию арендатора в квартире драгоценный камень

Apartment::Tenant.switch!('destination') 
models.each do |modal| 
    eval("@#{modal.downcase} = #{modal}.all.collect{ |p| p.to_dh }") 
end 
Apartment::Tenant.switch!('target') 
models.each do |modal| 
    eval("@#{modal.downcase}.each{ |p| #{modal}.create(p[:attributes], :without_protection => true) rescue p[:id]}") 
end 
models.each do |modal| 
    ActiveRecord::Base.connection.reset_pk_sequence!(eval("#{modal}.table_name"))  
end 

Любая помощь будет принята с благодарностью.

ответ

1

По умолчанию Квартира использует разные схемы для разных арендаторов. Итак, я бы попытался скопировать схему через pg_dump и psql.

pg_dump -U <username> -p <port> -n <source> <database name> >> <dump filename> 
# edit the dump.file 
# CREATE SCHEMA <source>; => CREATE SCHEMA <target>; 
# ALTER SCHEMA <source> OWNER TO <username>; => ALTER SCHEMA <target> OWNER TO <username>; 
psql -U <username> -p <port> -d <database> -f <dump filename>