2012-06-18 234 views
1

在我的Rails應用程序中,用戶可以創建課程和學校(組)。每次用戶創建課程或學校時,他們的user_id都存儲在課程或學校的數據庫表中,因此用戶has_many:學校和課程以及學校或課程belongs_to:用戶。此外,用戶可以通過關係模型(具有user_id,school_id和:role [字符串]的學校以及課程student_users(和professor_users))參加課程並加入學校(作爲學生或教授)其中有:USER_ID,COURSE_ID和:角色[字符串]我的問題是,在用戶模式,我可以只指定一旦:has_many通過Ruby on Rails應用程序

has_many :schools, :dependent => :destroy 
has_many :courses, :dependent => :destroy 
has_many :schoolgroups, :dependent => :destroy 
has_many :student_users, :dependent => :destroy 
has_many :professor_users, :dependent => :destroy 

不然我就必須有一個看起來像這樣的用戶模型:

has_many :schools, :dependent => :destroy 
has_many :courses, :dependent => :destroy 
has_many :schoolgroups, :dependent => :destroy 
has_many :schools, :through => :schoolgroups 
has_many :student_users, :dependent => :destroy 
has_many :courses, :through => :student_users 
has_many :professor_users, :dependent => :destroy 
has_many :courses, :through => :professor_users 
+0

您無法指定具有相同名稱('courses')的多個關聯。不知道這是你在這之後,但是? – polarblau

+0

是的,我想我應該做的是在兩個關係表中更改「course」和「school」id字段的名稱,然後指定一個外鍵 –

回答

1

你需要考慮的車型中更詳細一點的所有權has_many意味着多到一的關係,這樣說。 Professor has_many Courses意味着教授擁有的課程和課程只有一位教授(或者是否?)。所以,你會做這樣的事情:

has_many :school, :dependent => :destroy 
has_many :courses, :dependent => :destroy 
has_many :schoolgroups, :dependent => :destroy 

在另一方面,你必須的事情,用戶與之相關聯,但其他用戶也可以以同樣的方式有關。例如,用戶可以是一門課程的學生,但其他學生也可以。爲此,您需要使用has_and_belongs_to_many或HABTM這代表了許多一對多的關係:

has_and_belongs_to_many :courses_as_student, :class_name => "Course", 
              :join_table => "student_users" 

然後在Course類:

belongs_to :user 

# or even better: 
# belongs_to :professor, :class_name => "User", :foreign_key => "professor_id" 

has_and_belongs_to_many :students, :class_name => "User", 
            :join_table => "student_users" 

您可以在Rails documentation閱讀所有的細節。