0

我正在爲一個具有兩個不同角色TeachersStudents的學習Web應用建模。兩者之間有許多共同的行爲,將它們抽象爲基類AppUser是有意義的。它還有助於爲兩個模型使用單表繼承,並使用單個表app_users存儲這兩種類型。Rails:記錄間具有多對多自聯接關係的單表繼承

現在一個Teacher可以有很多Students,並且Student可以被許多不同Teachers註冊課程。所以這是一個適當的多對多關係。我如何建模一個表中記錄之間的多對多關係。

我想,一個選擇是使用上AppUser連接表 - 像app_users_app_users,具有teacher_idstudent_id列。定義這個的語法是什麼?

另一種方法是使用模型,如AppUserRelationship,然後定義has_many through的關係。有什麼辦法做到這一點?

回答

1

這只是一個想法,創造新的關係表,許多持有許多關係

class Relation < ActiveRecord::Base 
    belongs_to :student, foreign_key: "student_id", class_name: "User" 
    belongs_to :teacher, foreign_key: "teacher_id", class_name: "User" 
end 

class User < ActiveRecord::Base 
    # as teacher 
    has_many: student_relations, foreign_key: :teacher_id, class_name: "Relation" 
    has_many: students, through: :student_relations, source: :student 
    # as student 
    has_many: teacher_relations, foreign_key: :student_id, class_name: "Relation" 
    has_many: teachers, through: :teacher_relations, source: :teacher 
end 
之間