我如何使用活动logging的轨道中的两个不同的数据库?

我需要在不同的Rails模型中使用不同的数据库连接。 有没有这样做的方法呢?

任何链接或search关键字将是伟大的:)

mikej是对的。 然而,我写了一个让模型代码连接得更干净的gem, 看看 。

添加新的部分到你的database.yml例如

 other_development: adapter: mysql database: otherdb_development username: root password: host: localhost other_production: adapter: mysql database: otherdb_production username: root password: host: localhost 

lib/other_database.rb添加一个类

 class OtherDatabase < ActiveRecord::Base establish_connection "other_#{RAILS_ENV}" end 

然后对于不在OtherDatabase的默认数据库子类中的每个模型,例如:

 class MyModel < OtherDatabase # my model code... end 

我一直在使用以下连接到2分贝在同一个应用程序。 我把它们放在lib文件夹中,因为里面的东西都被加载了。

 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 

希望有所帮助

更新Rails 3.x:

 class MyModel < ActiveRecord::Base establish_connection "other_#{Rails.env}" end 

我认为使用活动模型连接到另一个数据库的最好方法是创build外部数据库的基类,然后从模型中的基础inheritance。 这个方法适用于rails 4.2.6和5.0.4

例如:

 # in /models/external_db/base.rb require 'active_record' class ExternalDb::Base < ActiveRecord::Base self.abstract_class = true establish_connection "external_db_#{Rails.env}".to_sym end 

在你的模型类中:

 # in /models/external_db/some_model.rb class ExternalDB::SomeModel < ExternalDb::Base # your code end 

但是你必须在/config/database.yml中定义外部数据库

 # in /config/database.yml external_db_development: adapter: sqlite3 pool: 5 timeout: 5000 database: db/external_db_development.db external_db_production: adapter: sqlite3 pool: 5 timeout: 5000 database: db/external_db_production.db 

在rails 4.1+中, establish_connection现在需要一个符号:

 class OtherDbModel < ActiveRecord::Base establish_connection :"other_#{Rails.env}" end