0

Je modélise une application Web d'apprentissage avec deux rôles distincts, Teachers et Students. Il y a beaucoup de comportement commun entre les deux et il est logique de les résumer à une classe de base AppUser. Il permet également d'utiliser l'héritage à table unique pour les deux modèles, avec une seule table app_users qui stocke les deux types.Rails: héritage à table unique avec relations d'auto-jointure plusieurs-à-plusieurs entre enregistrements

Maintenant un Teacher peut avoir beaucoup Students, et un Student pourraient être inscrits à des cours par de nombreux Teachers. Donc, c'est une bonne relation plusieurs-à-plusieurs. Comment puis-je modéliser une relation plusieurs-à-plusieurs entre des enregistrements dans une seule table.

Je pense que l'une option est d'utiliser une table de jointure sur AppUser - quelque chose comme app_users_app_users, avec un teacher_id et une colonne student_id. Quelle est la syntaxe pour définir cela?

Une alternative consiste à utiliser un modèle, par exemple AppUserRelationship, puis à définir les relations has_many through. Quelle est la façon de faire cela?

Répondre

1

ce juste une idée, créer une nouvelle table de relation de tenir plusieurs à plusieurs entre

class Relation < ActiveRecord::Base 
    belongs_to :student, foreign_key: "student_id", class_name: "User" 
    belongs_to :teacher, foreign_key: "teacher_id", class_name: "User" 
end 

class User < ActiveRecord::Base 
    # as teacher 
    has_many: student_relations, foreign_key: :teacher_id, class_name: "Relation" 
    has_many: students, through: :student_relations, source: :student 
    # as student 
    has_many: teacher_relations, foreign_key: :student_id, class_name: "Relation" 
    has_many: teachers, through: :teacher_relations, source: :teacher 
end