Ruby On Rails - 同一个表之间的多对多

时间:2010-06-23 02:00:18

标签: ruby-on-rails activerecord

我试图在Rails中创建一个有点复杂的关系,并且在找到最佳方法时遇到了一些麻烦。我有一个用户表,其中每个用户充当教师和学生。我想有一个has_many“学生”(也只是用户)和一个has_many“老师”(也只是用户)。我不想做任何子类或单表继承。我想在用户之间想要两个不同的many_to_many。做这个的最好方式是什么?这是一个坏主意吗?有更好的解决方案吗?

1 个答案:

答案 0 :(得分:6)

你应该能够像任何其他多对多关系一样设置任务模型并使用它:

class User < ActiveRecord::Base
  has_many :student_teacher_assignments, :class_name => "StudentTeacherAssignment", :foreign_key => "student_id"
  has_many :teachers, :through => :student_teacher_assignments
  has_many :teacher_student_assignments, :class_name => "StudentTeacherAssignment", :foreign_key => "teacher_id"
  has_many :students, :through => :teacher_student_assignments
end

class StudentTeacherAssignment < ActiveRecord::Base
  belongs_to :student, :class_name => "User"
  belongs_to :teacher, :class_name => "User"
end

我会将作业的名称更改为更不相似且更有意义,但概念应该保持不变