2

我正在研究User模型,每個用戶都應該能夠同時擁有學生和教師。然而,由於學生老師都是User類型,我的模型有點複雜。Ruby on Rails:Model Association with multiple foreign keys

這就是我現在正在嘗試的。

Teacher_student_link

class TeacherStudentLink < ActiveRecord::Base 
    attr_accessible :student_id, :teacher_id, :user_id 

    belongs_to :user 
    belongs_to :teacher, :class_name => "User" 
    belongs_to :student, :class_name => "User" 
end 

用戶

class User < ActiveRecord::Base 
    has_many :teacher_student_links, :foreign_key => { :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 

我認爲,唯一的問題ABOV e是我不能同時給teacher_student_link兩個外鍵,但我不確定。作爲解決方法,我的模型中沒有teacher_id,只是在student.user中調用teacher。任何人都可以幫我解決這個問題嗎?

更新: 使用下面的解決方案,我應該如何創建一個新的鏈接?

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中,有user,student,teacher,我不知道如何處理創建鏈接。

回答

3

您應該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 

您可能需要外鍵添加到belongs_to的關聯上TeacherStudentLink也

更新:

關於關於創建鏈接的第二個問題,以下內容應該有效:

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

TeacherStudentLink應該自動創建,並且如果一切設置正確,您的關聯應該可以工作。

+0

太棒了!像魅力一樣工作。 –

+0

非常好,很高興我能幫到你。 :) –

+0

等一下,我還有一個問題。當我想要創建鏈接時,我很困惑。你能檢查我的更新嗎? –