2016-07-10 3 views
1

の動的スキーマは、私たちが行うことができます知っています:RailsのモデルのRails 4.2では

self.table_name = 'users' 

しかし、私はクライアントのためのスキーマに一部のモデルを持っているアプリを持っています。 ではありません。モデルはスキーマにあります。いくつかは共有されています。たとえば、ユーザーの個人情報は各スキーマにのみ存在します。

は、私たちが行うことができます知っている:

self.table_name = 'schema_name.users' 

しかし、どのような各schema_nameが異なる場合 - クライアントあたり?私は正常に1つのスキーマのユーザーテーブルにデータを挿入できますが、同じセッションで、別のスキーマのユーザーテーブルに挿入しようとすると、そこに保存されません。私はtable_nameがキャッシュされていると思いますので、設定したままにしておいてください...

何か提案がありますか?これがRailsでも可能であると確信しています。

は、あなたが行くことができ

答えて

0

一つの方法は、すべてこれを行い、異なるテナント間でテーブルを共有ハンドル宝石アパートを使用https://github.com/influitive/apartment

その他の方法でそれをチェックアウトであなたを設定しているありがとうスキーマをコントローラ内のデータベースにロードする前に、次のように入力します。

User.table_name = 'schema_name.users' 
+0

ありがとうございます。しかし、これがモデルを通じた創造のためのものだったらどうでしょうか?私はアパートをチェックアウトします... –

+0

私がUserモデルを持っている場合、作成する前にこの 'User.table_name = 'schema_name.users''を実行します – neydroid

+0

すごい!だから私は、組織のクッキーから読み込む 'set_runtime_organization'を呼び出す' ApplicationController'に 'before_action'を持っていました。そこから、私は 'ModelName.table_name ="#{schema_name} .model_name'を例として行うことができます。これはうまくいくはずです... –