16

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

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

这是一个例子:

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

4

2 回答 2

12

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

您可以将 db 凭据establish_connection作为Hash

establish_connection(
  adapter: 'mysql2',
  encoding: 'utf8',
  pool: 5,
  username: 'me',
  password: 'mypassword'
)

这里有更多例子

于 2013-07-30T08:40:53.130 回答
7

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

但是,你可以让不同的类连接到不同的数据库我不想复制别人的答案,所以看看这个帖子

将 Rails 3.1 与多个数据库连接起来

并给予他信任

祝你好运

于 2013-07-30T08:46:09.210 回答