需要基于客户端连接多个数据库。
我找到了一些解决方案来切换到模型中的另一个数据库,
在用户模型中,
class User < ActiveRecord::Base
SupportBase.new.support_db_connection(self)
end
SupportBase.rb中的
class SupportBase
def support_db_connection(model_name)
db_connection(model_name)
end
private
def db_connection(model_name)
databases = YAML::load(IO.read('config/database_support.yml'))
model_name.establish_connection(databases[Rails.env])
end
end
这有助于我切换到database_support数据库。
但我需要动态更改数据库名称。 如何将User模型中的database_name传递给该方法,
SupportBase.new.support_db_connection(self,database_name)
或者还有其他方法可以做到这一点。
答案 0 :(得分:0)
将配置保存在一个地方 database.yml
development:
adapter: postgresql
other stuff...
production:
adapter: postgresql
other stuff..
external:
.....
然后创建一个类
class SupportBase < ActiveRecord::Base
establish_connection(:external)
self.table_name = "your_table"
end
然后您可以像
一样访问SupportBase.first
我认为这会保持备用数据库连接打开,这对性能也是一件好事,同时也允许你使用AR
On dynamic:在database.yml中创建尽可能多的环境,与类关联。你将有连接。
查看我的blog了解更多信息。
编辑:在DB上动态加载时,建议是,将新配置写入database.yml
文件并重新加载文件
答案 1 :(得分:0)
如果您有两个数据库的详细信息,请使用活动的record.establish_connection方法在Rails中的两个数据库之间切换。
这是代码。
ActiveRecord::Base.establish_connection(
:adapter => "postgres",
:host => "host",
:username => "myuser",
:password => "mypass",
:database => "somedatabase"
)
答案 2 :(得分:0)
使用 ar-octopus gem。这对于这种情况非常有用。