Tricky active record relationship - polymorphe bidirektionale selbstreferentielle

8

Wie würden Sie die Verweise und Zitate auf Publikationen (Artikel, Bücher, Kapitel usw.) modellieren?

Eine Veröffentlichung kann ein Artikel, ein Buch oder ein Kapitel sein, und es hat viele Verweise auf andere Publikationen und andere Publikationen verweisen darauf (nennen Sie diese Zitate)

Ich muss in der Lage sein, die Beziehungen zwischen den Publikationen aufzulisten: Die Verweise in einer Veröffentlichung und die Zitate aus anderen Veröffentlichungen zu dieser Veröffentlichung

Mein erstes Verständnis ist, dass dies eine polymorphe Beziehung wäre, um die verschiedenen Arten von Veröffentlichungen zu handhaben und dass es einen bidirektionalen Selbstbeitritt erfordern würde.

Mein Stich drauf

%Vor%

Ich finde das ein bisschen verwirrend, also wären alle Vorschläge, die zur Klärung beitragen würden, großartig. Sogar Vorschläge für die Benennung von Objekten und Feldern.

[Ich habe eine weniger klare Version dieser Frage gestellt hier .]

Ich muss wahrscheinlich auch viele verwenden, weil ich die Fähigkeit brauchen werde, die Beziehung zu zerstören

    
srboisvert 11.02.2009, 10:32
quelle

3 Antworten

12

Hier ist eine Lösung, die eine selbstreferenzielle Beziehung unter Verwendung der Vererbung einzelner Tabellen verwendet. Verwenden Sie diese Befehle, um die App zu erstellen:

%Vor%

Das Einrichten der Beziehungen auf diese Weise:

%Vor%

Jetzt können wir die DB erstellen und sie von der Konsole aus ausprobieren:

%Vor%     
pjb3 15.02.2009, 14:31
quelle
5

Hier ist eine Lösung, die für die Veröffentlichungen keine Tabellenvererbung verwendet. Das bedeutet, dass es anstelle einer Publikationstabelle Artikel, Bücher und Kapiteltische gibt. Hier sind die Befehle zum Ausführen der App:

%Vor%

Erstellen Sie diese Datei in lib/acts_as_publication.rb :

%Vor%

Erstellen Sie diese Datei in config/initializers/acts_as_publication.rb :

%Vor%

Dann nenne das in jedem Modell, Artikel, Buch und Kapitel wie folgt:

%Vor%

Fügen Sie dann diese Beziehungen in app/models/citation.rb :

hinzu %Vor%

Jetzt können wir die DB erstellen und sie von der Konsole aus ausprobieren:

%Vor%     
pjb3 15.02.2009 13:50
quelle
1

Ich habe eine unvollständige Antwort auf Ссылка

Grundsätzlich unterstützt das DB-Schema Ihren Anwendungsfall, ActiveRecord jedoch nicht. Die Lösung wird wahrscheinlich die Verwendung von find by sql oder anderen Tricks beinhalten.

    
François Beausoleil 11.02.2009 15:36
quelle

Tags und Links