2010-03-03 56 views
1

我有一個內容管理系統應用程序,它使用多態樹表作爲其排列的核心。我遇到了一個問題,一旦樹增長得相當大,並且因爲我們有很多不同的模塊(大約25),只是這樣做:include =>:instance不會切割芥末。實例是我們多態關係的名稱。在多態關係中緩存列

有趣的是,在大多數情況下,當我想要這些項目的大量列表時,我真正想要的是他們的名稱來自關聯的表格(例如爲了索引欄的目的),其餘的都在中央桌子。所以我認爲我應該在中央表中實現某種列緩存作爲名稱。 (就像rails已經做的計數器緩存一樣)。

我只是想知道是否存在一個插件來管理這已經?

如果沒有,我只是要在中心表中添加一個'name'列,並且因爲所有的多態模型都從一個超類繼承而來,只需添加一個回調函數,只要該項是創建或更新。那麼我會做一個大遷移來首先填充它?

該設計的任何缺陷?

我認爲更靈活的列可以是某種序列化緩存,如果需要的話,我可以稍後存儲其他內容。爾加! :D

回答

0

那麼爲了回答我自己的問題,我在中心表上添加了一個'cached_name'列,創建了'rebuild_cached_name!'方法,只是通過每個記錄並將緩存名稱設置爲適當的值。我從創建緩存列的遷移中調用了重建方法。

然後,我修改了抽象類(多態繼承關閉的類)上的after_create方法,並將其分配給中央表中的cached_name。我還添加了一個after_update方法調用,在正常名稱更改時更新cached_name。

真的很簡單,但現在它意味着不再需要在生成索引欄等簡單情況下調用多形態。