Using ActiveRecord on Multiple Databases

2020-06-08 12:41发布

I am writing a payroll system that will integrate with a pre-existing system. The original system had a master database that handled user management and some global configuration, below that there are multiple databases each identical in structure, basically each database is one companies payroll database, all these are tied to the main database because it belongs to a parent company who has many subsidiaries each with their own HR department.

What I was wondering is if there is any way that I can, based on either a cookie or another method that stores what company they wish to connect to, dynamically change the ActiveRecord's target database based on their input using a before filter?

Here's an example:

User A logs in to the site, page loads with available companies that the user has permission to access, user will then select a company, they have admin privileges in that company, they add an employee, before that action is run, rails will switch the connection to the appropriate database then add the record.

2条回答
Emotional °昔
2楼-- · 2020-06-08 12:55

I'm not sure you can do it in run time, since the database connection is coupled to the class (model)

However, you can make different classes to be connected to different databases I don't want to copy someone else answer, so just look at this post

Connecting Rails 3.1 with Multiple Databases

and give him the credit

Good luck

查看更多
▲ chillily
3楼-- · 2020-06-08 13:12

You can use ActiveRecord::Base#establish_connection, to connect to the desired database.

You could pass the db credentials to establish_connection as a Hash

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

There are more examples here

查看更多
登录 后发表回答