2016-05-14 14 views
1

Wir haben eine Benutzer-Tabelle. Benutzer haben viele Einträge.Octopus Gem dynamisch wählen Sie Shard für ein zugehöriges Modell basierend auf shard_id

Wir möchten das Assoziationsmodell Listing so shard, dass alle Benutzer auf Datenbank "Master" Shard bleiben. Benutzer erhalten eine shard_id-Spalte und Listen werden in verschiedene Datenbanken "shard1", "shard2" aufgeteilt.

Wir können unseren Code erweitern die Objekte auf der richtigen Scherbe, um die using Methode:

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

jedoch, dass eine große Codeänderung ist. Im Idealfall wollen wir unsere bestehenden Assoziations Aussagen wie diese nur halten mit:

current_user.listings 

Und haben sie automatisch current_user.shard_id unter der Haube verwenden.

Irgendwelche Vorschläge, dies zu tun?

Antwort

0

Gemäß der Dokumentation, current_user.listings sollte funktionieren aus der Box.

Octopus behandelt auch Assoziationen. Wenn Sie versuchen, ein Objekt zu erhalten, die zu einem anderen Objekt zugeordnet ist, können Sie normale Active Syntax verwenden, um die Objekte

+0

zu bekommen, das funktioniert nur, wenn current_user und Angebote auf dem gleichen Shard sind. Es funktioniert nicht, wenn sich der Benutzer im Master-Shard befindet und Listing auf Shard1 steht. current_user wird davon ausgehen, dass sich die Verknüpfung im selben Shard befindet wie der current_user. – Homan