2013-08-27 46 views
0

我開始了我的第一個rails應用程序,我只想確保我的關聯會像我希望的那樣工作。這裏是我的應用程序模型的概述:鐵軌 - 我的協會是否正確?

class School < ActiveRecord::Base 
    has_many :courses 
    has_many :teachers, :through => :courses 
    has_many :students, :through => :courses 
end 

class Course < ActiveRecord::Base 
    belongs_to :school 
    belongs_to :teacher 
    has_and_belongs_to_many :students 
end 

class Teacher < ActiveRecord::Base 
    has_many :courses 
    has_many :students, :through => :courses 
end 

class Student < ActiveRecord::Base 
    has_and_belongs_to_many :courses 
    has_many :teachers, :through => :courses 
end 

有一兩件事至今我已經注意到的是,如果我試圖讓老師和學生在學校都將在同一記錄多次返回。我知道我可以調用uniq,但我寧願不必這樣做。所以我想知道是否有更好的方法可以做到這一點。

+1

我認爲你應該在老師和學生模型中添加school_id,然後建立一個從學校到他們的直接has_many關聯。您將始終通過使用HABTM關聯獲得重複記錄。 – Bigxiang

回答

1

要不是我,我也不會下屬的教師或學生的課程,而是直接向學校。沒有課程的教師是否不存在?同樣一個學生?

而且我會使用定義的模型連接教師和學生的課程,而不是通用的habtm - 定義模式讓你輕鬆存儲額外的屬性 - 學生可能有比如課程的成績。

也許:

學校,有很多老師,有很多學生,有很多課程。

學院,有很多教誨,有過教導的許多課程。

學生,有很多註冊,必須通過註冊許多課程。

課程,有很多註冊,必須通過註冊許多學生來說,有很多教誨,有過教導許多教師。

教學屬於教師,屬於課程。

註冊,屬於學生,屬於課程。

+0

真棒,這更接近我在腦海中想的。雖然,它是否會削減教師和教師,只有老師?我希望每門課程都有一名教師,但教師可以有多門課程。 – dhouty

+0

我想我可以和老師has_many做到我想要的東西:課程和課程belongs_to:老師,但對於我來說,課程屬於老師似乎很奇怪。對我而言,從某種意義上說,一門課程可能更有意義,但根據我的理解,外鍵可以添加到教師模型中,因此教師只能擁有一門課程。那麼,我擁有屬於老師的課程是我的最佳選擇嗎? – dhouty

+0

至少在我的腦海裏,教師並沒有那麼多'自己'的課程(也沒有課程'自己的'教師),但是老師通過被分配來教授課程而與課程有關聯。老師可以沒有課程就可以存在,沒有老師就可以有課程存在。如果某個課程的老師不得不在中期/年度/其他方面改變,那麼結束當前的教學關係並開始一個新的教學關係是微不足道的。我可能會演繹太寬泛的解釋,但我也覺得你的觀點太狹窄了。最後,這是您的設計,所以設計以最好地解答您的使用案例。 – railsdog

0

關於在唯一約束你的興趣,你可以實際指定has_many :through只返回唯一的記錄。

has_many :teachers, through: :courses, -> { distinct } 

查看the Rails Guide該主題。

關於附加:school_id,如果StudentTeacher讓人聯想到School由他們登記或教學Course純粹的定義,我看不出有什麼直接的問題與Teacher並指定:school_idParent