Трябва просто да посочите вашите опции за връзка или в модела, или в database.yml. Първоначално да минем по 1-вия маршрут:
# This is the new users table - connects to development/test/production
# DB from 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" # Whatever you require
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" # Whatever you require
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 и се свържете, като използвате правилния синтаксис установяване на връзка:
# database.yml
development:
adapter: postgresql
# go on as usual, for all 3 envs
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" # Whatever you require
belongs_to :company, :class_name => "OldCompany", :foreign_key => "fk_company_id"
end
Бинго, всичко останало ще работи добре.
person
François Beausoleil
schedule
31.08.2010