2017-04-09 4 views
1

2つの異なるサービスを提供する複数のデータベース接続を持つ1つのRailsインスタンスがあります。のは、それがサービスを提供していましょうサービス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 

アパートメントには、Railsアプリケーションで複数のテナントを扱うためのツールが用意されています。あなたが特定のデータは、アカウントまたは会社に基づいて隔離していますが、まだいくつかのデータは、一般的なテナントに存在することができるようにする必要がある場合は、アパートは

gem 'apartment' 

Apartment gemを助けることができるこれはあなたのように、最も簡単な方法で複数のDBを使用するようにアクセスすることができます可能。

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 
のようにアクセスすることができます
関連する問題