我正在使用 rake 任务在架构略有不同的数据库之间移动数据。
当型号名称不同时,这没有问题。例如,将信息从具有“Manufacturer”模型的单独数据库复制到当前应用程序的“Company”模型中:
task :copy_from_old_to_new => :environment do
require "active_record"
class Manufacturer < ActiveRecord::Base
end
Manufacturer.establish_connection(
:adapter =>"postgresql",
:host => "...",
:username => "...",
:database => "...")
Manufacturer.find_each do |m|
Company.new do |c|
c.name = m.name
c.location = m.geography
c.save
end
end
Manufacturer.connection.close
end
但是,当在具有相同模型名称的两个数据库之间进行复制时,这不起作用,因为为外部数据库定义类会覆盖当前应用程序中的类。有什么想法吗?
最佳答案
您可以覆盖任何模型的表名称:
class SomeModel < ActiveRecord::Base
self.table_name = 'some_table'
如果您仍然希望模型以其表命名,您可以将它们限制在某个模块中。
另外,不要忘记,多个数据库查询在一个事务中运行得更快。
您还可以将数据库连接参数放在不同部分下的 database.yml
中,并通过将其名称传递给 assessment_connection
方法来连接它:
class SomeModel < ActiveRecord::Base
establish_connection :name_of_my_db_in_yml
如果有多个模型,您可以创建一些基类并从中派生模型:
class MyBase < ActiveRecord::Base
self.abstract_class = true # important! We don't make STI, just some abstraction.
establish_connection :name_of_my_db_in_yml
class SomeModel < MyBase
# connection will be established to your :name_of_my_db_in_yml db
关于ruby-on-rails - Rake 任务在具有相同模型名称的数据库之间复制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12537211/