2016-05-14 6 views
1

ユーザーテーブルがあります。ユーザーには多くのリスティングがあります。Octopus gemは、shard_idに基づいて関連モデルのシャードを動的に選択します

私たちは、すべてのユーザーがデータベースの「マスター」シャードに留まるような関連付けモデルを破棄したいと考えています。ユーザーはshard_id列を取得し、リストは異なるデータベース "shard1"、 "shard2"に分割されます。

我々はusingメソッドを使用して正しいシャード上のリストにアクセスするために我々のコードを強化することができます

Listing.where(user: current_user).using(current_user.shard_id) 

をそれは大きなコード変更ですが。

current_user.listings 

そして、それは自動的にボンネットの下にcurrent_user.shard_idを使用してい:理想的には私たちは、このような当社の既存の関連文を使用して保存しておきたいです。

これにはどのような提案がありますか?

答えて

0

ドキュメントによれば、current_user.listingsはすぐに使用できます。

Octopusも関連付けを処理します。あなたが別のオブジェクトに関連付けられているオブジェクトを取得しようとすると、CURRENT_USERとリストが同じシャード上にある場合のみ動作するオブジェクト

+0

を取得するには、通常のActiveRecordの構文を使用することができます。ユーザーがマスターシャードにあり、リストがShard1にある場合は動作しません。 current_userは、関連付けがcurrent_userと同じシャード上にあると想定します。 – Homan

関連する問題