2010-06-23 81 views
0

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

+1

这不是一个坏主意,你会遵循多对多的标准东西,但使用相同的类而不是一个不同的类。有一个名为class_name或:class的关系修饰符。 – 2010-06-23 02:05:15

回答

5

你应该能够建立一个分配模型,并使用它,就像任何其他的许多一对多的关系:

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 

我想改变分配的名称是少一点相似,更有意义,但概念应该保持不变

+0

啊,那差不多是我想要做的,但是我弄错了。这很好。谢谢! – 2010-06-23 02:21:43