查看更新的評論。Rails:多對多多態關係
我一直在努力得到一個清晰而直接的答案,我希望這一次我能得到它! :D 我肯定還有很多事情要跟Rails學習,但是我理解我面臨的問題,並且非常感謝您提供更多幫助。
- 我有一個名爲「任務」的模型。
- 我有一個叫做「Target」的抽象模型。
- 我想將Target的子類的多個實例關聯到Task。
- 我沒有使用單個表繼承。
- 我想查詢多態關係以返回Target的子類的混合結果集。
- 我想查詢Target的子類的單個實例以獲取它們與之關係的任務。
因此,我認爲任務和子目標之間的多態關係是多態的。 更詳細,我就可以做這樣的事情在控制檯(當然其他地方):
task = Task.find(1)
task.targets
[...array of all the subclasses of Target here...]
但是!假設模型「商店」,「軟件」,「辦公室」,「車輛」,這是「目標」存在的所有子類,這將是很好也穿越在其他方向的關係:
store = Store.find(1)
store.tasks
[...array of all the Tasks this Store is related to...]
software = Software.find(18)
software.tasks
[...array of all the Tasks this Software is related to...]
的通過多態關係暗示的數據庫表似乎是能夠做這個穿越的,但我看到一些反覆出現的主題,試圖找到這對我打敗多態性關係的精神答案:
- 使用我的例子是,人們似乎想要定義商店,軟件,辦公室,任務中的車輛,我們現在可以告訴它不是多態關係,因爲它只返回一種型號。
- 與最後一點類似,人們仍然希望以任何形式或形式定義「任務」中的「商店」,「軟件」,「辦公室」和「車輛」。這裏重要的一點是,這種關係對於子類化來說是盲目的。我的多形態最初只會與目標交互,而不是它們各自的子類類型。在Task中定義每個子類再次開始消除多態關係的目的。
- 我看到連接表的模型可能是有序的,這似乎對我來說是正確的,只是它增加了一些複雜性,我認爲Rails願意取消。我懇求這方面缺乏經驗。
這似乎是軌道功能或集體社區知識的一個小漏洞。所以希望stackoverflow可以記錄我的搜索答案!
感謝大家的幫助!
在你的六個要點,其中五人是平凡的實現如果你刪除了第六,「我不使用單表繼承」。 關於您在STI下面的觀點,由於額外的列確實會影響您,請考慮使用委派將額外的數據和行爲推送到其他模型。 – austinfromboston 2009-07-15 02:51:15
向外推動是造成這種情況的原因。性傳播感染雖然不是一種選擇。我希望這是因爲,是的...每個人都是它的粉絲。但我希望存儲的數據具有內聚性,並且會有相當多的不同類型的目標。 我仍然覺得有點驚人的是,沒有辦法像這樣拉取混合的集合。我的設計看起來很合理。 – 2009-07-15 03:30:06
我已經能夠通過使用has_many_polymorphs來完成我想要的大部分功能。 剩下的一個限制是我仍然堅持定義每個父類型(任務)中的多態類型。 歡迎使用其他解決方案,但我不確定解決方案會在我們面前出現,直到新版本的rails或has_many_polymorphs更新! – 2009-07-15 19:19:39