2013-03-01 86 views
0

我有3個型號,一個學校其中有很多教師學生。問題是,學生可以屬於一個學校教師,所以理論上他們總是通過協會屬於學校。我將如何處理Rails/Active Record中的這種數據結構?需要Rails/Active Record多態關聯嗎?

class School < AR::Base 
     has_many :teachers 
     has_many :students 

    end 

    class Teacher < AR::Base 
     belongs_to :school 
     has_many :students 

    end 

    class Student < AR::Base 
     belongs_to ??? 

    end 

回答

0

該解決方案應該可以工作,但您對我的介紹有疑問;你說「老師有很多學生」。這句話意味着「一個學生有一位老師」。

也許你應該設置一個has_and_belongs_to_many關聯。

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

class Teacher < AR::Base 
    belongs_to :school 
    has_many :students 
end 

class Student < AR::Base 
    belongs_to :teacher 
    belongs_to :school, :through => :teacher 
end 
+0

爲了澄清,一位教師可以有很多學生。最大的問題是,一個學生根本不必有一個老師,它可以只屬於一個沒有教師關係的學校。 – Dan 2013-03-01 11:02:57

+0

因此,以前的解決方案,沒有「通過」,應該工作。但你的學校學生不會是學校老師的學生。 – pierallard 2013-03-01 11:14:05

0

顯然你需要polymarphic協會,是可以做到

class School < AR::Base 
has_many :teachers 
has_many :students, :as => :studentable 
end 

class Teacher < AR::Base 
belongs_to :school 
has_many :students 
end 

class Student < AR::Base 
belongs_to :studentable 
end 

不要忘記studentable_id和studentable_type增加學生模型。