2017-04-09 128 views
1

我有一個單一的Rails實例,具有多個數據庫連接,它提供兩種不同的服務。比方說,它提供服務A服務B.服務A需要連接到數據庫A「和服務B需要連接到數據庫B」A'B'中的大多數表格是相同的(表名稱,模式)。例如。數據庫A'B'都具有具有相同模式的表User。目前我的用戶模型的樣子:具有多個數據庫連接的Rails應用程序

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 

內部控制我必須做這樣的事情:

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

有沒有什麼更好的辦法在軌這將最大限度地減少重複的代碼來處理這種情況呢?

回答

0
Multitenancy for Rails and ActiveRecord 

Apartment提供的工具可以幫助您處理Rails應用程序中的多個租戶。如果你需要有一個基於帳戶或公司隔離某些數據,但仍允許一些數據在一個共同的承租人存在,公寓可以幫助

gem 'apartment' 

Apartment gem這使您可以訪問使用最簡單的方式爲多個數據庫可能。現在

Apartment::Tenant.switch db_name 

您可以像這樣訪問

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 
相關問題