Rails:单表继承,记录之间具有多对多自连接关系

时间:2017-07-16 06:01:30

标签: ruby-on-rails ruby-on-rails-4 activerecord has-many-through single-table-inheritance

我正在使用两个不同角色TeachersStudents为学习网络应用建模。两者之间存在许多共同的行为,将它们抽象为AppUser基类是有意义的。它还有助于为这两个模型使用单表继承,只有一个表app_users存储这两种类型。

现在,Teacher可以包含多个Students,并且Student可以通过许多不同的Teachers注册到课程中。所以这是一个适当的多对多关系。我如何在单个表中建立记录之间的多对多关系。

我认为一个选项是在AppUser上使用联接表 - 类似app_users_app_usersteacher_idstudent_id列。定义它的语法是什么?

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

1 个答案:

答案 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