0

我正在为一个具有两个不同角色TeachersStudents的学习Web应用建模。两者之间有许多共同的行为,将它们抽象为基类AppUser是有意义的。它还有助于为两个模型使用单表继承,并使用单个表app_users存储这两种类型。Rails:记录间具有多对多自联接关系的单表继承

现在一个Teacher可以有很多Students,并且Student可以被许多不同Teachers注册课程。所以这是一个适当的多对多关系。我如何建模一个表中记录之间的多对多关系。

我想,一个选择是使用上AppUser连接表 - 像app_users_app_users,具有teacher_idstudent_id列。定义这个的语法是什么?

另一种方法是使用模型,如AppUserRelationship,然后定义has_many through的关系。有什么办法做到这一点?

回答

1

这只是一个想法,创造新的关系表,许多持有许多关系

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 
之间