Dies ist ein vereinfachtes Beispiel für das, was ich erreichen möchte. Ich bin relativ neu bei Rails und habe Mühe, mich mit den Beziehungen zwischen Modellen auseinanderzusetzen.
Ich habe zwei Modelle, das UserModell und das CategoryModell. Ein Benutzer kann vielen Kategorien zugeordnet werden. Eine bestimmte Kategorie kann für viele Benutzer in der Kategorieliste angezeigt werden. Wenn eine bestimmte Kategorie gelöscht wird, sollte dies in der Kategorieliste für einen Benutzer angezeigt werden.
In diesem Beispiel:
Meine CategoriesTabelle enthält fünf Kategorien:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ID | Name | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1 | Sport | | 2 | Nachrichten | | 3 | Unterhaltung | | 4 | Technologie | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Meine UsersTabelle enthält zwei Benutzer:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | ID | Name | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | 1 | UserA | | 2 | UserB | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
UserA kann Sport und Technologie als seine Kategorien auswählen
Benutzer B kann Nachrichten, Sport und Unterhaltung wählen
Die Sportkategorie wird gelöscht. Sowohl UserA- als auch UserB-Kategorielisten spiegeln die Löschung wider
Ich habe damit herumgespielt, eine UserCategoriesTabelle zu erstellen , die die IDs einer Kategorie und eines Benutzers enthält. Diese Art von funktionierte, ich konnte die Kategorienamen nachschlagen, aber ich konnte kein kaskadierendes Löschen zum Laufen bringen und die ganze Lösung schien einfach falsch zu sein.
Die Beispiele für die Verwendung der Funktionen "Gehorsam" und "Habe_Viele", die ich gefunden habe, scheinen die Zuordnung einer Eins-zu-Eins-Beziehung zu erörtern. Zum Beispiel Kommentare zu einem Blog-Beitrag.
- Wie stellen Sie diese Viele-zu-Viele-Beziehung mithilfe der integrierten Rails-Funktionalität dar?
- Ist die Verwendung einer separaten Tabelle zwischen beiden eine praktikable Lösung bei der Verwendung von Rails?
UserCategoryModells, es ist in den meisten Fällen sogar wünschenswert. Sie müssen nur verwendenUser.has_many :categories, through: :user_categories. Vielleicht könnte ein besserer Name gefunden werden.