在多个数据库上使用ActiveRecord

时间:2013-07-30 08:32:29

标签: ruby-on-rails ruby

我正在编写一个与预先存在的系统集成的工资单系统。原始系统有一个处理用户管理和一些全局配置的主数据库,下面有多个数据库,每个数据库在结构上相同,基本上每个数据库都是一个公司工资单数据库,所有这些数据库都绑定到主数据库,因为它属于父数据库公司拥有许多子公司,每个子公司都有自己的人力资源部门。

我想知道的是,如果有任何方法可以根据cookie或其他方法存储他们希望连接的公司,可以使用之前的过滤器根据输入动态更改ActiveRecord的目标数据库?

以下是一个例子:

用户A登录该站点,页面加载用户有权访问的可用公司,然后用户将选择一家公司,他们在该公司拥有管理员权限,他们在该行动开始之前添加员工, rails将连接切换到相应的数据库,然后添加记录。

2 个答案:

答案 0 :(得分:12)

您可以使用ActiveRecord::Base#establish_connection连接到所需的数据库。

您可以将数据库凭据作为establish_connection

传递给Hash
establish_connection(
  adapter: 'mysql2'
  encoding: 'utf8'
  pool: 5
  username: 'me'
  password: 'mypassword'
)

还有更多示例here

答案 1 :(得分:7)

我不确定您是否可以在运行时执行此操作,因为数据库连接已耦合到类(模型)

但是,您可以将不同的类连接到不同的数据库 我不想复制别人的答案,所以只看这篇文章

Connecting Rails 3.1 with Multiple Databases

给他信用

祝你好运