1

我有一个内容管理系统应用程序,它使用多态树表作为其排列的核心。我遇到了一个问题,一旦树变得很大,并且因为我们有很多不同的模块(大约 25 个),只做 :include => :instance 并不能减少芥末。Instance 是我们多态关系的名称。

有趣的是,在大多数情况下,当我想要这些项目的大列表时,我真正想要的只是关联表中的名称(例如,出于索引栏的目的),其余的都在中央表中。所以我想我可能应该为中央表中的名称实现某种列缓存。(就像 rails 已经做的计数器缓存一样)。

我只是想知道是否存在插件来管理这个?

如果没有,我只是要在中央表中添加一个“名称”列,因为所有多态模型都继承了一个超类,所以只需添加一个回调,在创建或更新项目时将名称推送到中央表。然后我会先进行一次大迁移来填充它?

该设计有任何缺陷吗?

我想更灵活的列可以是某种序列化缓存,如果需要,我可以稍后存储其他东西?呸!:D

4

1 回答 1

0

为了回答我自己的问题,我在中央表上添加了一个“cached_name”列,创建了一个“rebuild_cached_name!” 刚刚遍历每条记录并将缓存名称设置为正确值的方法。我从创建缓存列的迁移中调用了重建方法。

然后我在我的抽象类(多态继承的那个)上修改了 after_create 方法,并使它在中央表中分配了 cached_name。我还添加了一个 after_update 方法调用,该方法调用在更改正常名称时更新 cached_name。

真的很简单,但现在这意味着不再需要在简单的情况下调用多态,比如生成索引栏。

于 2010-03-08T08:12:28.783 回答