Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Using ActiveRecord on Multiple Databases

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.

like image 324
clifford.duke Avatar asked Jul 30 '13 08:07

clifford.duke


2 Answers

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

like image 110
Santhosh Avatar answered Oct 01 '22 13:10

Santhosh


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

like image 28
obenda Avatar answered Oct 01 '22 12:10

obenda