2013-01-22 36 views
0

這是一個從this.自我指涉協會

這是我目前的設置,使教師與學生關係的後續問題。

用戶模型

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型號

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

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

看來尷尬的我,因爲teacher_student_links表有三列:用戶,學生,教師。用戶可以有很多老師,他也可以有很多學生。如果我沒有老師專欄,只是假裝「用戶」是一位「老師」,那麼一切都完美無缺。有沒有辦法解決這個問題?

+1

爲什麼你不能在'TeacherStudentLink'模型中擺脫'user_id'列和':user'關聯? –

+0

@cheeseweasel你仍然可以在這種情況下做current_user.teachers? –

+0

是的 - 每個用戶都有一個「老師」和一個「學生」協會​​。 –

回答

1

在評論中說了什麼cheeseweasel,你的鏈接不應該有user_id的

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

    belongs_to :student, :class_name => "User", :foreign_key => :student_id 
    belongs_to :teacher, :class_name => "User", :foreign_key => :teacher_id 
end 
  • belongs_to的foreign_key指定對當前表(鏈接)外鍵
  • 的has_many foreign_key指定的外鍵另一個表(鏈接)
+1

道歉,如果我愚蠢(它發生的事情比我想要承認的更頻繁;)),但不會導致從協會名稱推斷外鍵? –

+1

它可能在這種情況下 - 因爲您的關聯被命名爲「學生」,並且會匹配fk student_id;經常當我需要指定class_name我有一個不匹配的fk,所以我習慣於每當使用class_name時使用fk – house9