2010-06-01 49 views
4

我有一個俱樂部的模型,我想模擬兩個實體會議和會員。如何在同一張兩張桌子之間做多個多對多的關係

雖然這些實體之間實際存在兩個多對多的關係,但對於任何會員而言,成員可以是發言者或來賓。現在我是一名OO思想家,所以通常只需創建兩個類,每個類都只有兩個內部數組,但是Rails讓我在這裏考慮更多的以數據爲中心,因此我意識到我需要打破這些M2M我已經完成了演講嘉賓和嘉賓的關係,但現在我無法描述模型中的關係。

兩個連接表模型都有「belongs_to:meeting」和「belongs_to:member」,我認爲這應該足夠了。

雖然我不確定會議和會員模型。

每個人都有「的has_many:客人」和「的has_many:喇叭」但我不知道如果我還想去的地方: 的has_many:成員:通過=>:客人 的has_many:成員:通過=> :揚聲器

但我懷疑這就像聲明兩個「成員」會衝突。

我也想過: 的has_many:嘉賓:通過=>:客人 的has_many:音箱:通過=>:音箱

這是否有意義? ActiveRecord如何知道他們實際上是成員?

我發現的多態M2M關係和M2M的關係,其中1個表引用本身,而是沒有很好的例子幫我這個模式情況下兩個獨立的表有兩個不同的M2M關係的例子堆。

任何人有任何提示?

回答

2

你需要選擇不同的關聯的名稱,然後指定型號:

class Meeting 
    has_many :guests 
    has_many :speakers 
    has_many :guest_members, :through => :guests, :source => 'Member' 
    has_many :speaker_members, :through => :speakers, :source => 'Member' 
end 
+0

感謝您的答覆。我嘗試過,儘管:class_name不支持:through,使用:source works。 現在我只需要努力與形式,控制器,路由器等。我不知道如果我想使用成員控制器或訪客和揚聲器控制器。我現在的表單尋找一個會員控制器,所以我會先嚐試... – Kurt 2010-06-01 19:20:47

+1

哦,對,對不起。我會爲未來的讀者編輯答案。對於它的價值,我可能會設計這個像'的has_many:成員:通過=>:registrations'和'的has_many:音箱:通過=>:speaker_registrations,:源=>「Member'' – mckeed 2010-06-02 15:19:07

相關問題