新旧系统数据迁移脚本

require 'active_record'
require 'ruby-progressbar'
require 'yaml'
ROOT = File.expand_path("..",__FILE__)

DB_CONFIG = YAML.load(File.new("#{ROOT}/database.yml"))
class FromDB < ActiveRecord::Base
  self.record_timestamps = false
  self.abstract_class = true
  establish_connection(DB_CONFIG['from'])
end
class ToDB < ActiveRecord::Base
  self.record_timestamps = false
  self.abstract_class = true
  establish_connection(DB_CONFIG['to'])

  def self.get_instance(obj)
    self.find_by_id(obj.id) || self.new
  end

  def self.save_from(obj)
    n = get_instance(obj)
    self.column_names.each do |c|
      m = "convert_#{c}"
      v = nil
      if obj.respond_to?(m)
        v = obj.send(m)
      else
        v = obj.send(c) if obj.respond_to?(c)
      end
      n.send("#{c}=", v) if !v.nil?
    end
    obj.after_save_callback(n) if n.save && obj.respond_to?(:after_save_callback)
    n
  end
end



require File.expand_path("../../migrate_db.rb",__FILE__)
class Fromventory < FromDB
  self.table_name = "ventories"

  def convert_active
      self.state == 2 ? -1 : 1
  end
end

class Toventory < ToDB
  self.table_name = "ventories"
end

Fromventory.all.each do |src|
  c = Toventory.save_from(src)
end

猜你喜欢

转载自schooltop.iteye.com/blog/2341773