ruby-on-rails – Ruby on Rails – STI的替代品?
我有许多不同的模型(接近20个),它们有一些共同的属性,但在某些程度上也有所不同. STI起初看起来很有吸引力,但我不知道随着产品的快速发展,各种模型会如何随着时间的推移而发展.
与我们的应用程序很好地平行的是Yelp. Yelp如何在Rails中管理一些东西?所有帖子都有一些共同的属性,如“地址”.然而,他们在其他方面存在很大差异.例如,您有餐馆的预订选项,而其他人可能没有.餐馆还有许多其他属性,如“允许饮酒”,不适用于他人.使用STI执行此操作将很快失控. 那么下一个最佳选择是什么?与Postgres的HStore?我不习惯使用HStore来做任何事情. HStore解决了一些问题,同时介绍了其他问题,比如缺乏数据类型,缺乏参照完整性检查等等.我希望有一个可靠的关系数据库作为构建的基础.所以在Yelp案例中,可能是餐馆模特是我要去的地方.我已经看过像这里的建议 – http://mediumexposure.com/multiple-table-inheritance-active-record/,但是我很乐意做这么多的猴子修补以获得如此常见的东西. 所以我想知道还有其他替代方案(如果有的话)或者我应该咬紧牙关,磨牙并将这些常见属性复制到20个模型中?我认为我的问题将来自迁移文件而不是代码本身.例如,如果我将迁移设置为循环遍历表并在表上设置这些属性,那么我是否可以通过使用不同的模型来减轻问题的严重程度? 我是否会忽略一些可能导致大量问题的重要问题? 解决方法
我在这里看到几个选项:
>咬紧牙关,创建具有许多相同属性的20种不同模型.这些模型可能会随着时间的推移而漂移 – 为一种特定类型添加新字段 – 您将创建一个带有STI的200列表.也许你没有 – 未来很难看到,尤其是探索/敏捷软件. 我真的担心有那些听起来像子类的东西的那么多(独立)模型.您可能可以通过使用Concerns来干扰常见的行为/方法(关于mixin概念的语法糖,参见awesome SO answer on concerns in Rails 4).当然,你仍然有你的(初始)迁移问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |