我如何使用活动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