has_and_belongs_to_many ist für einfache Viele-zu-Viele-Beziehungen gedacht.
has_many: through ist auf der anderen Seite für indirekte Eins-zu-viele-Beziehungen oder Viele-zu-viele-Beziehungen mit Eigenschaften gedacht.
Wenn Sie nur eine einfache Viele-zu-Viele-Beziehung suchen, kann ich keinen Grund sehen, has_and_belongs_to_many nicht zu verwenden.
Beispiel many-to-many-Beziehung:
Benutzer gehört zu null oder mehr Gruppen und Gruppe hat null oder mehr Mitglieder (Benutzer).
Beispiel vieler-zu-viele-Beziehung mit den Eigenschaften:
Benutzer gehört zu null oder mehr Gruppen und Gruppe hat null oder mehr Mitglieder mit den Rängen.
Zum Beispiel könnte Alice ein Administrator in Gruppe A und ein Moderator in Gruppe B sein. Sie können diese Eigenschaft in der Join-Tabelle speichern.
Beispiel indirekt eine Eins-zu-viele-Beziehung:
die Kategorie A hat keine oder mehr Untergruppen, und jede Unterkategorie hat null oder mehr Elemente.
Eine Kategorie hat daher null oder mehr Elemente durch ihre Unterkategorien.
Betrachten Sie diese Kategorien:
Lebensmittel → Obst, Gemüse
Früchte → Apple, Orange, usw.
Gemüse → Karotte, Sellerie usw.
daher:
Essen → Apfel, Orange, Möhre, Sellerie, etc.
Um die Rekursion zu verstehen, müssen Sie zuerst die Rekursion verstehen. Ich denke, Ihre Antwort könnte klarer oder demonstrativ sein in Bezug auf Viele-zu-Viele-Beziehungen mit Eigenschaften vs. Viele-zu-Viele-Beziehungen ohne Eigenschaften. –
Lassen Sie mich ein paar Beispiele hinzufügen. –
+1, das hat mir auch sehr geholfen. –