简体   繁体   中英

Rails application with multiple database connections

I have a single Rails instance with a multiple database connection which serves two different services. Let's say it serves service A and service B. Service A requires connection to database A' and Service B requires connection to database B' . Most of the tables in A' and B' are identical (table name, schema). Eg. Database A' and B' both have a table User with identical schema. Currently my model for user looks like:

class User_A < ABase #connects to A'
    self.table_name = "user"

    def foo
      ...
    end

end

class User_B < BBase #connects to B'
    self.table_name = "user"

    def foo
      ...
    end

end

Inside controller I have to do something like:

if is_A?
 user = User_A.find(123)
else
 user = User_B.find(123)
end

Is there any better way to handle such situation in rails which would minimize code repetition?

Multitenancy for Rails and ActiveRecord

Apartment provides tools to help you deal with multiple tenants in your Rails application. If you need to have certain data sequestered based on account or company, but still allow some data to exist in a common tenant, Apartment can help

gem 'apartment'

Apartment gem This gives you access to use multiple db in most easy way as possible.

Apartment::Tenant.switch db_name

Now You can access like this

class User < ABase

    def foo
      Apartment::Tenant.switch db_a
      #Do what you update in db_a

      Apartment::Tenant.switch db_b
      #Do what you update in db_b
    end

end

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM