我正在使用两个不同角色Teachers
和Students
为学习网络应用建模。两者之间存在许多共同的行为,将它们抽象为AppUser
基类是有意义的。它还有助于为这两个模型使用单表继承,只有一个表app_users
存储这两种类型。
现在,Teacher
可以包含多个Students
,并且Student
可以通过许多不同的Teachers
注册到课程中。所以这是一个适当的多对多关系。我如何在单个表中建立记录之间的多对多关系。
我认为一个选项是在AppUser
上使用联接表 - 类似app_users_app_users
,teacher_id
和student_id
列。定义它的语法是什么?
另一种方法是使用模型,如AppUserRelationship
,然后定义has_many through
关系。有什么办法呢?
答案 0 :(得分: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