Bitte erläutern Sie den Unterschied zwischen has_and_belongs_to_many und has_many durch Beziehung. Wann und wo benutzt man welchen?has_and_belongs_to_many vs has_many durch
Antwort
Soweit ich mich erinnern kann, gibt has_and_belongs_to_many
Ihnen eine einfache Nachschlagetabelle, die auf Ihre zwei Modelle verweist.
Zum Beispiel
Geschichten können zu viele Kategorien gehören. Kategorien können viele Geschichten haben.
Categories_Stories Table
story_id | category_id
has_many :through
gibt Ihnen ein drittes Modell, das verwendet werden kann, verschiedene andere Informationen zu speichern, die entweder nicht von den ursprünglichen Modellen gehören.
Zum Beispiel
Person kann viele Zeitschriften abonnieren. Zeitschriften können viele Abonnenten haben.
So können wir ein Subskriptionsmodell in der Mitte haben, die uns eine ähnliche Tabelle zu dem früheren Beispiel gibt, aber mit zusätzlichen Eigenschaften.
Subscriptions Table
person_id | magazine_id | subscription_type | subscription_length | subscription_date
Und so weiter.
Die einfachste Daumenregel ist, dass Sie eine has_many einrichten sollten: durch Beziehung, wenn Sie mit dem Beziehungsmodell als eigenständige Einheit arbeiten müssen. Wenn Sie mit dem Beziehungsmodell nichts anfangen müssen, ist es möglicherweise einfacher, eine has_and_belongs_to_many-Beziehung einzurichten (obwohl Sie daran denken müssen, die Verbindungstabelle in der Datenbank zu erstellen). Sie sollten has_many: through verwenden, wenn Sie Validierungen, Callbacks oder zusätzliche Attribute im Join-Modell benötigen.
Ich würde auch hinzufügen, dass es viele Methoden Schienen Inserts zu has_and_belongs_to_many und nicht zu has_many: durch .Alle Methoden, wie das Zuweisen einer Sammlung von Werten zu der Verknüpfung, scheinen nicht in der Dokumentation für has_many: through http://guides.rubyonrails.org/association_basics.html#has_and_belongs_to_many-association-reference zu erscheinen – e3matheus
Meine Faustregel ist, kann ich hier mit einer Liste von Checkboxen auskommen? Wenn ja, dann ist es ein gutm Verein. Wenn ich das Kontrollkästchen brauche, um mehr über die Beziehung zu erfassen, als einfach Ja/Nein, dann gehört has_many: through. HABTM ist so einfach wie die _ids-Methode mit einer einfachen_sammlung_scan_boxes. Has_many: through beinhaltet oft accresents_nested_attributes_for.
Sie sollten has_many: through verwenden, wenn Sie Validierungen, Callbacks oder zusätzliche Attribute für das Join-Modell benötigen.
- 1. has_many: durch eine has_and_belongs_to_many Verein
- 2. Wie migrieren has_and_belongs_to_many zu has_many durch?
- 3. has_many durch mehrere Quellen
- 4. rails has_many: durch has_many: durch
- 5. has_many: durch nicht initialisierte Konstante
- 6. has_many durch belongs_to mit einem has_many
- 7. has_and_belongs_to_many in Rails
- 8. rails has_many: durch die Assoziation funktioniert nicht
- 9. has_many: durch sekundären Polymorphismus
- 10. Schienenmodell has_many: durch Beziehung
- 11. has_many durch Update Problem
- 12. Rails polymorph has_many: durch
- 13. merkwürdige Vereinigung Fehler mit einem has_many: durch Vereinigung
- 14. Versionierung auf einem has_and_belongs_to_many?
- 15. Speichern has_and_belongs_to_many Kind
- 16. Wie durch verschachtelte has_many durch suchen?
- 17. has_many: durch mit einem Fremdschlüssel?
- 18. Rails acts_as_paranoid und has_many: durch
- 19. has_many, durch Assoziationen in Ecto
- 20. Verwendung mit has_many bauen: durch
- 21. Rails erstellen Objekt has_many durch
- 22. Vereinigung für Modell - has_many: durch
- 23. Has_many durch Assoziation - Ansicht? Regler?
- 24. Polymorphe has_many: durch in Schienen
- 25. Anzeigen has_many,: durch Assoziation Datensätze
- 26. Polymorphes Modell und has_many durch
- 27. Eager loading mit has_many durch
- 28. Schienen Anwendungsbereich durch has_many Assoziation
- 29. Rails - Suche durch has_many Verein
- 30. Exact Zugordnungseintrag mit has_many durch
beachten Sie, dass die Tabelle in alphabetischer Reihenfolge benannt werden muss, d. H. Categories_stories-Tabelle im Gegensatz zu stories_categories - dies ist die Konvention, die es funktioniert. – Will
Danke, ich habe meinen Beitrag jetzt geändert – Dan
warum müssen sie alphabetisch @Will sein? – ctilley79