Iam设置用户帐户,用户具有不同的角色。我使用STI,我的模型看起来像:
class User < ActiveRecord::Base
end
Class Teacher < User
end
Class Student < User
end
如何在学生和教师之间建立多对多的关系,以便我可以拨打电话,
Teacher.students
或Student.teachers
??
蒂雅克
答案 0 :(得分:0)
我将“是否使用STI”放在一边?问题并假设你有理由。
当然,您需要一个id列,例如teacher_id。
我将在我的示例中包含显式类名,因为我知道它有效,但我可能只需要它们因为我的模型是命名空间的,所以它们对你来说可能是多余的。
class Teacher < User
has_many :students, :class_name => 'Student', :foreign_key => 'teacher_id'
end
class Student < User
belongs_to :teacher, :class_name => 'Teacher', :foreign_key => 'teacher_id'
end
应该这样做 - 当然。除非我错过了多对多,否则就会这样做。
所以我试试HABTM,但我承认我从来没有真正用STI做过这件事。
从此迁移开始,以创建连接表。
class CreateStudentsAndTeachers < ActiveRecord::Migration
def change
create_table :students_teachers do |t|
t.belongs_to :student
t.belongs_to :teacher
end
end
end
然后这应该工作(再次,你可能不需要指定的类名)
class Teacher < User
has_and_belongs_to_many :students, :class_name => 'Student'
end
class Student < User
has_and_belongs_to_many :teachers, :class_name => 'Teacher'
end