Ich versuche, mehrere Beziehungen zwischen Datensätzen des gleichen Modells über Self-Joins zu implementieren (basierend auf @ Shtééf Antwort ). Ich habe folgende Modelle
%Vor%Mit diesem Setup kann ich erfolgreich auf die Listen der Untergebenen und Manager für jeden Datensatz zugreifen. Ich habe jedoch Schwierigkeiten, Beziehungen auf folgende Weise zu erstellen:
%Vor%Das Problem ist, dass es keine Art von Beziehungen einstellt, also muss ich
schreiben %Vor%Mache ich etwas falsch?
Sie können before_add
und before_remove
callback für die Zuordnung has_many verwenden:
Das sollte funktionieren und Sie können employe.managers.create
verwenden
Möglicherweise möchten Sie build
intread von create
im Rückruf von
verwenden
Sie können auch diese Frage zu dieser Lösung
Um eine multiple Viele-zu-Viele-Self-Join-Verknüpfung zu erstellen, würde ich empfehlen, dass mehrere Tabellen zum Verwalten der Verbindung sinnvoller sind. Auf diese Weise ist es vom Standpunkt der Daten aus sehr klar, was genau vor sich geht, und es ist auch logisch klar. Also etwas in dieser Richtung:
%Vor%Auf diese Weise wird es vom Codierungsstandpunkt aus nicht mehr gewunden als nötig, und Sie können mit den Standard-Sammlungen darauf zugreifen und es wird Ihre Verbindungen für Sie richtig einrichten, ohne dass Sie sie verwalten müssen. Also, diese beiden Sammlungen sollten funktionieren ..
%Vor%Und Sie könnten keine anderen Variablen verwalten müssen. Sinn ergeben? Es fügt eine Tabelle hinzu, verbessert aber die Übersichtlichkeit.
Ich würde Ihre Modelle wie folgt wiederholen:
%Vor%Jetzt können Sie Folgendes tun:
%Vor%Hinweis: Es ist normalerweise ein Anzeichen dafür, dass man das Unternehmen verlässt, wenn sie an zwei Manager berichtet werden: -)
Angesichts der vorgestellten Beziehung
%Vor%Obwohl die Lösung funktioniert - bin ich ein bisschen verwirrt, indem ich die Assoziationen mit "rel_type" verknüpfe. In diesem Fall - ich würde sagen, der rel_type ist redundant und die Beziehung sollte wie folgt zugeordnet werden:
%Vor%In einem solchen Fall sollte das Zuordnungsmapping etwas einfacher sein.
Tags und Links ruby-on-rails activerecord many-to-many associations self-join