Ruby on Rails:具有多个外键的模型关联

我正在研究User模型,每个用户都应该能够同时拥有学生和教师。 但是,由于学生老师都是User类型,我的模型有点复杂。

这就是我现在正在尝试的。

Teacher_student_link

 class TeacherStudentLink  "User" belongs_to :student, :class_name => "User" end 

用户

 class User  { :student_id, :teacher_id }, :dependent => :destroy has_many :students, :through => :teacher_student_links has_many :teachers, :through => :teacher_student_links end 

如果一切按照我的意图行事,我应该能做到

 @user = User.new @user.students @user.teachers @user.student.teachers 

我认为上面唯一的问题是我不能同时给teacher_student_link两个外键,但我不确定。 作为一种解决方法,我的模型中还没有teacher_id,只是让student.userteacher打电话。 任何人都可以帮我解决这个问题吗?

更新:通过以下解决方案,我应该如何创建新链接?

 def become_student @user = user.find(params[:id]) @student_link = @user.student_links.create(:student_id => current_user.id) @teacher_link = current_user.teacher_links.create(:teacher_id => @user.id) end 

如果我这样做,学生和老师是否配对正确? 我很困惑,因为在TeacherStudentLink中,有userstudentteacher ,我不知道如何处理创建链接。

您应该将teacher_student_links关联分为两个关联:

  has_many :teacher_links, :foreign_key => :student_id, :dependent => :destroy, :class_name => "TeacherStudentLink" has_many :student_links, :foreign_key => :teacher_id, :dependent => :destroy, :class_name => "TeacherStudentLink" has_many :students, :through => :student_links has_many :teachers, :through => :teacher_links 

您可能还需要将外键添加到TeacherStudentLink上的belongs_to关联

更新:

关于创建链接的第二个问题,以下内容应该有效:

 @user = User.find(params[:id]) @user.students << current_user 

应自动创建TeacherStudentLink,如果一切设置正确,您的关联应该有效。