2017-04-11 5 views
0

各社がデータベースを持ち、ユーザーがログインすると、各ユーザーが持つ「company.id」フィールドに応じてデータベースが変更されるマルチ会社Webサイトを開発しています。問題は、会社「X」のユーザーがログオンし、会社「Y」の別のユーザーをログすると、変更されるたびにすべてのログインユーザーに影響を及ぼすデータベースが変更されることです。 にログインするユーザのために、これは、データベースを変更するには、私のコードです:各ユーザーのデータベースを変更します

def set_database 
    if user_signed_in? 
     company = (current_user.company_id).to_s.to_sym 
     ActiveRecord::Base.establish_connection(company) 
    else 
     ActiveRecord::Base.establish_connection(:'232') 
    end 
end 

変数「会社」は、ユーザの「のcompany_id」の値を取ると、会社のデータベースとの接続を行いますたとえば、会社が "32"の値を持つ場合、database.ymlで接続を行います:

'32': 
    adapter: sqlserver 
    mode: dblib 
    dataserver: 
    host: host 
    port: 1433 
    database: database 
    username: user 
    password: pass 
    timeout: 60000 
    azure: true 

どのようにco uldは、別のデータベースを持つ他のユーザーに影響を与えることなく、各ユーザーにログオンしますか?

+0

これが良い解決策であるかどうかは不明ですが、ユーザーのデータベース情報をセッションに格納してからクエリ用に参照することは可能でしょうか? – bkunzi01

答えて

1

あなたの知識に基づいて判断すると、アプリケーションのこの時点で(データベースでも)自分自身のマルチテナントを転用したくない(おそらくbasecamp a very large rails app doesn't do that)。それは、非常に大きくて毛むくじゃくすることができ、あなたが十分大きな規模に達するまで起こる必要はありません。また、データベース接続の作成と破棄にかかるコストが発生し、すべての要求に対して高価になる可能性があります。

代わりに、私はいくつかあるうちmulti-tenancy gemを使用することをお勧めしたい:acts_as_tenant

または代替としてApartment

  • +0

    答えをありがとう、この宝石は、私は各ユーザーのデータベースを変更することができますか? – luis31

    関連する問題