你应该在模型或database.yml中简单地指定连接选项。首先让我们走第一条路:
class User < ActiveRecord::Base
end
class OldUser < ActiveRecord::Base
establish_connection :adapter => "postgresql",
:database => "legacy_users",
:username => "whatever",
:password => "something"
set_table_name "u_users"
belongs_to :company, :class_name => "OldCompany", :foreign_key => "fk_company_id"
end
class OldCompany < ActiveRecord::Base
establish_connection :adapter => "postgresql",
:database => "legacy_users",
:username => "whatever",
:password => "something"
set_table_name "u_company"
has_many :users, :class_name => "OldUser", :foreign_key => "fk_company_id"
end
从常规代码中,您可以像往常一样使用模型:
OldUser.find_each do |ouser|
User.create!(:username => ouser.username, :company_name => ouser.company.name)
end
ActiveRecord会为你处理所有细节。
现在,如果你像我一样,不喜欢在模型中添加这种详细信息 - 用户名、密码等。那么简单地将配置移动到database.yml文件中,并使用正确的establish_connection语法连接:
development:
adapter: postgresql
legacy_users_development:
adapter: postgresql
database: legacy_users
username: whatever
password: something
注意命名规则 - 我在这里的目标是使用 legacy_users_#{Rails.env},以下是如何实现:
class OldUser < ActiveRecord::Base
establish_connection "legacy_users_#{Rails.env}"
set_table_name "u_users"
belongs_to :company, :class_name => "OldCompany", :foreign_key => "fk_company_id"
end
完美,其它所有东西都将正常工作。
set_table_name
已被弃用,应使用self.table_name
。 - Thomas Obermüller