2010-03-03 58 views
1

我有一个内容管理系统应用程序,它使用多态树表作为其排列的核心。我遇到了一个问题,一旦树增长得相当大,并且因为我们有很多不同的模块(大约25),只是这样做:include =>:instance不会切割芥末。实例是我们多态关系的名称。在多态关系中缓存列

有趣的是,在大多数情况下,当我想要这些项目的大量列表时,我真正想要的是他们的名称来自关联的表格(例如为了索引栏的目的),其余的都在中央桌子。所以我认为我应该在中央表中实现某种列缓存作为名称。 (就像rails已经做的计数器缓存一样)。

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

如果没有,我只是要在中心表中添加一个'name'列,并且因为所有的多态模型都从一个超类继承而来,只需添加一个回调函数,只要该项是创建或更新。那么我会做一个大迁移来首先填充它?

该设计的任何缺陷?

我认为更灵活的列可以是某种序列化缓存,如果需要的话,我可以稍后存储其他内容。尔加! :D

回答

0

那么为了回答我自己的问题,我在中心表上添加了一个'cached_name'列,创建了'rebuild_cached_name!'方法,只是通过每个记录并将缓存名称设置为适当的值。我从创建缓存列的迁移中调用了重建方法。

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

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