dav*_*mcd 7 ruby activerecord ruby-on-rails rails-activerecord
我试图实现一组我在纸上放在一起的模型并遇到了一个问题,我认为最好的方法就是使用多表继承设置.然而,谷歌搜索后我发现ActiveRecord不支持MTI ......尽管有很多文章显示它是如何完成的.这让我想知道如果没有实现我是否正确设置我的模型.所以我的问题是为什么Active Record没有内置对MTI的支持?如果您对我的模型设置"看起来像"我感到好奇,我将把它留在下面.
class Player < ActiveRecord::Base; end
class CollegePlayer < Player; end
class ProPlayer < Player; end
Run Code Online (Sandbox Code Playgroud)
Player可以是CollegePlayer和ProPlayer中的任何一个或两个.或者在另一个例子中......
class Person < ActiveRecord::Base; end
class User < Person; end
class Player < Person; end
class Coach < Person; end
Run Code Online (Sandbox Code Playgroud)
"人"可以是User,前者 Player和/或Coach.
对您问题的简短回答是因为 ActiveRecord 核心团队不希望包含此功能,而且社区需求不足。请参阅https://github.com/rails/rails/issues/5541
如果您想要明确的答案,则必须询问 DHH (david.heinemeierhansson.com) 或 Aaron Tender Love Patterson (tenderlove@github.com),因为他们是活动记录项目的“主要”贡献者。
我个人的答案是因为活动记录已经足够复杂了。为 ActiveRecord 完成的用于支持其已支持的功能的元编程量对于维护和扩展来说已经有点具有挑战性。目前致力于 AR 的核心团队一直致力于进一步优化 AR 以加快工作速度,并对其进行重构以清理组织。鉴于已经有获得多个表(如继承)的替代方案,并且社区并不强烈要求此功能,因此它的优先级较低。
尽管要评论关于数据库组织正确性的其他问题,我同意 muistooshort 的观点,但似乎您可以通过角色完成您想要的事情。当我第一次使用 C++ 时,我尝试为不同的对象创建单独的模型,并且强烈需要遵守某种复杂的继承方案。您只需要问问自己,您的应用程序现在所处的位置(不是未来的情况,因为这只是目前的猜测)这些类型之间的行为差异如此之大,以至于证明了这种程度的差异化是合理的。
编辑
我与 Thoughtbot 的 Sean Griffin 进行了交谈,他负责 Active Record,我问他为什么不支持多表继承,他的回答是:
“多态关联在大多数用例中都扮演着这个角色”
| 归档时间: |
|
| 查看次数: |
1635 次 |
| 最近记录: |