假设我有用户,每个用户都属于某个组。出于安全原因,我希望每个组都有单独的数据库。我想象对象 User 和 Group 存储在一个中央数据库中,并且针对该数据库执行身份验证,但所有其他对象动态连接到 Group 对象中定义的不同数据库。
所以问题是:如何根据某些参数(例如 dbname)使用我的对象动态连接到不同的数据库?
>您可以使用类方法"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 参数的哈希调用,例如
establish_connection { :username => "web", :database => "..." }
但我不知道如果你这样做,这是否会使用连接池。
当我在 rail(只是包含 activerecord 的纯 ruby)之外编写脚本,然后手动连接到 db 时,我也会这样使用它。
我希望这有所帮助。
问候, NoICE
使用我创建的 MultiConfig gem 来简化此操作。
您可以在单独的文件中指定配置,例如 second.yml 等,然后调用:
ActiveRecord::Base.config_file = 'second' # for all models
或
SomeModel < ActiveRecord::Base
self.config_file = 'second'
end
这样,它将更容易维护和更清洁。