代码之家  ›  专栏  ›  技术社区  ›  Brendon Muir

在多态关系中缓存列

  •  1
  • Brendon Muir  · 技术社区  · 14 年前

    我有一个内容管理系统应用程序,它使用一个多态树表作为其排列的核心。我遇到了一个问题,当树长得很大时,因为我们有很多不同的模块(大约25个),所以只需执行:include=>:instance不会切芥末。实例是多态关系的名称。

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

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

    如果没有,我只想在中心表中添加一个“name”列,因为所有的多态模型都继承了一个超类,所以只要添加一个回调,每当创建或更新该项时,回调就会将该名称推送到中心表中。然后我就做一个大规模的迁移来填充它?

    那个设计有缺陷吗?

    我想更灵活一点,列可以是某种串行缓存,如果需要的话,我可以在后面存储其他东西。啊!D

    1 回复  |  直到 14 年前
        1
  •  0
  •   Brendon Muir    14 年前

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

    然后我修改了抽象类的after-create方法(多态性继承的方法),并让它在中心表中分配缓存的名称。我还添加了一个after-update方法调用,每当普通名称更改时,它都会更新缓存的名称。

    确实很简单,但现在它意味着不再需要在生成索引条之类的简单情况下调用多形态。