假设我有用户,每个用户都属于某个群组。出于安全原因,我想为每个组分别设置数据库。我想象对象User和Group存储在一个中央数据库中,并且对该数据库执行身份验证,但所有其他对象动态连接到Group对象中定义的不同数据库。
所以问题是:如何根据某些参数(例如dbname)动态连接到我的对象的不同数据库?
答案 0 :(得分:1)
你可以使用类方法“establish_connection”,但说实话,我不知道每次你需要时是否可以动态调用它。我将它用于以这种方式连接到不同数据库的模型:
class SomeModel < ActiveRecord::Base
establish_connection "second_#{Rails.env}"
end
database.yml中:
development:
adapter: mysql2
username: web
password:
database: first_db
pool: 5
second_development:
...
database: second_db
pool: 5
据我所知,使用包含来自database.yml的参数的Hash也可以正确调用建立连接,例如
establish_connection { :username => "web", :database => "..." }
但是如果你这样做,我不知道这是否会使用连接池。
当我在rails之外编写脚本时(我只使用包含activerecord的纯ruby),我也会使用它,然后我手动连接到db。
我希望这会有所帮助。
问候,NoICE
答案 1 :(得分:0)
使用我创建的MultiConfig gem来简化这一过程。
您可以在单独的文件中指定配置,例如second.yml等,然后调用:
ActiveRecord::Base.config_file = 'second' # for all models
或
SomeModel < ActiveRecord::Base
self.config_file = 'second'
end
通过这种方式,维护和清洁看起来会更容易。