has_and_belongs_to_many est destiné aux relations simples-multiples. D'autre part, through_many est destiné à des relations un-à-plusieurs indirectes, ou à des relations plusieurs-à-plusieurs avec des propriétés.
Si vous recherchez uniquement une relation simple-à-plusieurs, je ne vois aucune raison de ne pas utiliser has_and_belongs_to_many.
Exemple many-to-many:
utilisateur appartient à zéro ou plusieurs groupes, et le groupe a zéro ou plusieurs membres (utilisateurs).
Exemple plusieurs à plusieurs avec des propriétés:
utilisateur appartient à zéro ou plusieurs groupes, et le groupe a zéro ou plusieurs membres avec rangs. Par exemple, Alice peut être un administrateur du groupe A et un modérateur du groupe B. Vous pouvez détenir cette propriété dans la table de jointure.
Exemple indirect one-to-many relation:
Une catégorie a zéro ou plusieurs sous-catégories, et chaque sous-catégorie a zéro ou plusieurs éléments.
Une catégorie a donc zéro élément ou plus à travers ses sous-catégories.
Tenir compte de ces catégories:
alimentaires → Fruits, légumes
Fruits → Apple, Orange, etc.
Légumes → carotte, céleri, etc.
donc:
Alimentation → Pomme, orange, carotte, céleri, etc.
Pour comprendre la récursivité, vous devez d'abord comprendre la récursivité. Je pense que votre réponse pourrait être plus claire ou démonstrative en ce qui concerne les relations plusieurs-à-plusieurs avec les propriétés plutôt que les relations plusieurs-à-plusieurs sans propriétés. –
Laissez-moi ajouter quelques exemples. –
+1, ça m'a beaucoup aidé aussi. –