什么时候STI是有意义的?我们为每种类型存储相同的信息,但使用方式不同



所以我知道STI是最受人诟病的事情,但我有一个实例,我认为它实际上可能是有道理的。我的应用程序正在解析一堆不同类型的xml文件。每个文件模型都存储完全相同的信息。只是一些关于它与什么用户相关联、何时上传以及存储在S3上的位置的信息。

xml文件存储后,我解析它的信息,我用它来创建各种其他模型。每种类型的文件将创建不同的东西。可能有100种或更多不同类型的xml文件,尽管我不打算为那么多类型的xml文件编写解析器。在这种情况下STI有意义吗?

我猜缺点是模型都在一个目录下,所以它会淹没这个目录,除非hack Rails并把它放在models dir的子目录中。

另一个选项是我有一个kind字段,并在lib目录中放置一些东西来处理所有这些。或者我使用resque,也许每个xml文件解析器应该是它自己的工作。不过,这样做也有缺点,比如在rails控制台中强制执行任务有点尴尬。

根据您的解释,'file'模型仅存储文件上传过程的结果和相关的元数据。如果没有更多关于从解析的XML数据生成的其他类型模型的信息,我不明白为什么单表继承适用于这个用例。

相关内容

最新更新