Rails多个关系和STI

时间:2014-03-27 16:37:17

标签: ruby-on-rails activerecord ruby-on-rails-4 sti

Iam设置用户帐户,用户具有不同的角色。我使用STI,我的模型看起来像:

class User < ActiveRecord::Base

end

Class Teacher < User

end

Class Student < User

end

如何在学生和教师之间建立多对多的关系,以便我可以拨打电话,

Teacher.studentsStudent.teachers ??

蒂雅克

1 个答案:

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