我有许多不同的模型(接近 20 个),它们具有一些共同的属性,但在其他方面也有所不同。起初,STI 似乎很有吸引力,但我不知道随着时间的推移,随着产品的快速开发,各种模型将如何演变。
想到的与我们的应用程序类似的一个很好的例子是 Yelp。Yelp 如何在 Rails 中管理某些东西?所有的帖子都有一些共同的属性,比如“地址”。然而,它们在其他方面有很大不同。例如,您有餐厅的预订选项,而其他人可能没有。餐馆还有很多其他属性,比如“允许饮酒”,这些属性并不适用于其他人。用 STI 这样做会很快失控。
那么下一个最佳选择是什么?HStore 与 Postgres?除了小事之外,我不习惯使用 HStore。HStore 解决了一些问题,同时引入了其他一些问题,例如缺少数据类型、缺少引用完整性检查等。我想要一个可靠的关系数据库作为构建的基础。所以在 Yelp 的案例中,餐厅模式可能就是我要去的地方。我已经看过类似这里的建议 - http://mediumexposure.com/multiple-table-inheritance-active-record/,但我不乐意做这么多猴子补丁来获得如此普遍的东西。
所以我想知道还有哪些其他选择(如果有的话),还是我应该硬着头皮咬紧牙关,将这些共同属性复制到 20 个模型中?我认为我的问题将来自迁移文件而不是代码本身。例如,如果我将迁移设置为循环遍历表并在表上设置这些属性,那么我是否可以通过使用不同的模型来减轻问题的程度?
我是否忽略了一些关键的东西,可能会在未来使用单独的模型导致大量问题?