2010-12-11 18 views
0

嗨 我想建立一個數據庫和它們之間的一些關聯,下面是一些描述如何提高這種相關性在Rails中

  1. 鼓手和視頻被許多-to-many關聯,因爲,有時,一個以上的鼓手將出現在一個視頻剪輯

  2. 鈸和視頻都只是衆多-to-many關聯,同樣的原因

  3. 事件和Video一個一對多的,因爲它是有道理的,一視頻僅代表只有一個事件

所以前兩個我的解決方案是採用兩個具有-和屬於-to-many關聯標誌的兩側,併爲第三一個我用簡單的一對一-many: 下面的代碼:

class Drummer < ActiveRecord::Base 
    has_and_belongs_to_many :videos 
end 

class Cymbal < ActiveRecord::Base 
    has_and_belongs_to_many :videos 
end 

class Video < ActiveRecord::Base 
    has_and_belongs_to_many :drummers 
    has_and_belongs_to_many :cymbals 
    belongs_to :event 
end 

class Event < ActiveRecord::Base 
    has_many :videos 
end 

但我認爲多態是更好的解決方案,視頻應該敷兩個很多其他車型,但我不知道如何使許多一對多多態關聯,我已經問過關於這個問題

回答

1

這個怎麼樣:

class Interpreter < ActiveRecord::Base 
    belongs_to :video 
end 

class Drummer < Interpreter 
end 

class Cymbal < Interpreter 
end 

class Video < ActiveRecord::Base 
    has_and_belongs_to_many :interpreters 
    has_and_belongs_to_many :drummers 
    has_and_belongs_to_many :cymbals 
    belongs_to :event 
end 

class Event < ActiveRecord::Base 
    has_many :videos 
end 

Video.first.interpreters應該返回所有drumers和鈸,而Video.first.drummersVideo.first.cymbals只會返回相應型號 CymbalsDrummers將共享同一個數據庫表interpreters