How do i work with two different databases in rails with active records?
I have been using the following to connect to 2 db in the same app. I put them in lib folder since everything in there is loaded.
require 'active_record'
class OldDatabase < ActiveRecord::Base
self.abstract_class = true
establish_connection(
:adapter => 'mysql',
:database => 'weather',
:host => 'localhost',
:username => 'root',
:password => 'password'
)
end
class NewDatabase < ActiveRecord::Base
self.abstract_class = true
establish_connection(
:adapter => 'mysql',
:database => 'redmine',
:host => 'localhost',
:username => 'root',
:password => 'password'
)
end
class WeatherData < OldDatabase
end
class Board < NewDatabase
end
Hope that helps
mikej is right. I did however write a gem that makes the model code to connect a little bit cleaner, check it out.
Add new sections to your database.yml
e.g.
other_development:
adapter: mysql
database: otherdb_development
username: root
password:
host: localhost
other_production:
adapter: mysql
database: otherdb_production
username: root
password:
host: localhost
Add a class in lib/other_database.rb
class OtherDatabase < ActiveRecord::Base
establish_connection "other_#{RAILS_ENV}"
end
and then for each model which isn't in the default database subclass from OtherDatabase
e.g.:
class MyModel < OtherDatabase
# my model code...
end
Update for Rails 3.x:
class MyModel < ActiveRecord::Base
establish_connection "other_#{Rails.env}"
end