Ruby on rails RubyonRails-同一个表之间的多对多

Ruby on rails RubyonRails-同一个表之间的多对多,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我正试图在Rails中创建一个有点复杂的关系,但在找到最好的方法时遇到了一些困难。我有一个用户表,其中每个用户充当教师和学生。我希望有很多“学生”(也只是用户)和很多“老师”(也只是用户)。我不想做任何子类化或单表继承。我只想在用户之间有两个不同的多对多。最好的方法是什么?这是个坏主意吗?有更好的解决方案吗?您应该能够设置分配模型,并像使用任何其他多对多关系一样使用它: class User < ActiveRecord::Base has_many :student_teacher_

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

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

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
class用户“学生教师作业”,:外键=>“学生id”
有很多:老师,:通过=>:学生\u老师\u作业
有很多:教师学生作业,:班级名称=>“学生教师作业”,:外键=>“教师id”
有很多:学生,:通过=>:教师学生作业
结束
类StudentTeacherAssignment“用户”
属于:教师,:班级名称=>“用户”
结束

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

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

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
class用户“学生教师作业”,:外键=>“学生id”
有很多:老师,:通过=>:学生\u老师\u作业
有很多:教师学生作业,:班级名称=>“学生教师作业”,:外键=>“教师id”
有很多:学生,:通过=>:教师学生作业
结束
类StudentTeacherAssignment“用户”
属于:教师,:班级名称=>“用户”
结束

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

这不是一个坏主意,你会遵循多对多的标准,但使用相同的类而不是不同的类。这个关系有一个修饰符,叫做:class_name或:class。这不是一个坏主意,您可以遵循多对多的标准,但使用相同的类,而不是不同的类。关系中有一个修饰符,叫做:class_name或:class.Ahhh,这正是我想做的,但我的理解有点错误。这很有效。谢谢啊哈,这正是我想做的,但我有点做错了。这很有效。谢谢