私は単一のクライアントアプリケーションを提供しています - Angular JSフロントエンドとMySQL DBを使用するRails APIバックエンド。私は、アプリケーションを単一のスキーマのマルチテナントアプリケーションに変換しようとしています。複数のスキーマであるとのPostgresを使用していますアパート、法案に適合していない、とact_as_tenantは、スレッドを使用するようだ - 私は可能性があれば宝石を使用したくないRails Web APIでの単一スキーマのマルチテナント
- :私は読書をたくさん行われてきました。私がしたくないテナントを特定するための最新情報
- default_scopeも使うべきではないと私は読んでいますが、私はここには入りません。
フロントエンドからRailsバックエンドにテナントトークンを渡しています。テナントトークンを使用して、私のApplicationControllerでテナントを識別しています。私は現在、データを読み書きするための最良の方法を考え出しているので、要求を行ったテナントに関連付けられています。
上記のオプションを除いて、私が見ることのできる唯一の選択肢は、データが書き込まれて読み込まれているところで、すべてのコントローラメソッドに入り、それらを更新することです。私はむしろ、各モデルに何らかのコールバックを適用するので、データが書き込まれるときにテナントIDが常に書き込まれ、データが読み込まれるときは常にテナントIDがフィルタとして使用されます。
モデル内のテナントトークンにアクセスできないとすれば、すべてのコントローラメソッドを更新する以外にどのように進めるべきかわかりませんが、これは面倒で間違いやすいプロセスです。
ありがとうございます!
Leanpubから入手できる[Multitenancy with Rails](https://leanpub.com/multi-tenancy-rails)という本をお勧めします。 – mysmallidea
ありがとう!私はいくつかの質問がありました: 現在のテナントが特定されました。データを読み込んでいるときに現在のテナントIDがフィルタとして使用されるように、他のモデルを更新するにはどうすればよいですか? current_tenant.idまたはTenant.current_idは、これらのモデルで利用できますか?たとえば、Userモデルですか? –
current_tenant変数を使用してすべてのクエリをスコープできます。たとえば、 'current_tenant.users.find(params [:id])'のようになります。 'current_tenant'をヘルパーメソッドとして定義しているので、あなたのビューでそれを使うこともできます。 – mysmallidea