除了两个属性外,我有2个具有相同模型的Rails应用程序。现在,我需要合并这些应用程序,并且正在尝试找出如何合并它们的数据。挑战是:
答案 0 :(得分:1)
前段时间,我遇到了一个类似的情况,该应用程序设计了数据库多租户。为了将所有数据合并到一个数据库中,我最终创建了一个rake任务,该任务将遍历每个记录和关联,并在新数据库中重新创建它们。
该任务具有两个参数SOURCE
和DESTINATION
,它的运行方式如下:
rake db:merge SOURCE=some_database DESTINATION=new_database
。该任务针对我需要合并的每个数据库运行。
在rake任务中,想法是这样的:
namespace :db do
task :merge => [:environment, :load_config] do |t, args|
raise "Empty SOURCE provided" if not ENV["SOURCE"] or ENV["SOURCE"].empty?
@source = ENV['SOURCE'].to_sym
@destination = (ENV['RAILS_ENV'] || 'development').to_sym
# for each model
ActiveRecord::Base.establish_connection(@source)
# obtain the records and its associations
ActiveRecord::Base.establish_connection(@destination)
# loop through each record and build all associated records
# apply any necesary transformation to data
# then build the record and fill it with the new associations
# skip callbacks / validations if needed
# then save
在某些情况下,为了跟踪我使用散列的关联中的ID,该散列会跟踪原始和 新的ID。
我知道每个应用程序的复杂性都会使此过程变得非常困难,但是在我看来 这种想法作为起点非常有用。