Viele-zu-Viele-Beziehung mit Mongoid-Datenbank-Design? - Ruby-on-Rails, Datenbankdesign, Mongoid

Ich versuche, die folgende Datenbankstruktur zu implementieren, habe aber Probleme zu verstehen, wie man dies mit mongoid macht:

Ich habe ein Modell Unterlagen, ein Model DocumentTeam und ein Modell Angestellte. Benutzer können Dokumente erstellen und Mitarbeiter auswählen, die zum DocumentTeam hinzugefügt werden. Hier bin ich atm:

class Document
embeds_one :document_team
end

class DocumentTeam
has_many :employees
embedded_in :document
end

class Employee
belongs_to :document_teams
end

Also meine Frage: Wie kann ich den Rails mitteilen, dass sie beim Erstellen eines Dokuments automatisch einen ausgewählten Mitarbeiter in das eingebettete DocumentTeam einfügen?

Außerdem möchte ich in der Lage sein, z.B. alle Briefings eines Mitarbeiters von

Employee.first.documents

ist das auch möglich?

Danke Fortschritt!

Antworten:

1 für die Antwort № 1

In Mongoid können Sie keine eingebetteten Dokumente referenzieren. Sie können auf Stammdokumente aus eingebetteten Dokumenten verweisen, aber nicht umgekehrt. Sie können nicht haben belongs_to :document_teams im Employee. Als Nebeneffekt sollten Beziehungen in eingebetteten Dokumenten auch einseitig sein. Sie können Ihre Modellierung auf Folgendes umstellen, um das zu erreichen, was Sie wollen:

class Document
embeds_one :document_team
end

class DocumentTeam
has_and_belongs_to_many :employees, inverse_of: nil
embedded_in :document
end

class Employee
def documents
Document.where("document_team.employee_ids" => self.id)
end
end

Dadurch können Sie verwenden Employee.first.documents, aber du kannst es nicht als Beziehung behandeln und weiterhin Dinge tun, die du mit Beziehungen tun kannst, wie das Neuzuweisen, Schieben und Ziehen von Dokumenten. Sie müssen die Beziehungen zwischen Teams und Mitarbeitern verwalten DocumentTeam Sie können aber direkt auf Mitarbeiterdokumente zugreifen, um sie zu lesen.

PS: Document ID ist kein guter Name für Klasse, ich denke, es könnte in irgendeinem Szenario mit Mongoid :: Document kollidieren.


Am beliebtesten