Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 为什么Rails中的ActiveRecord不支持多表继承?_Ruby On Rails_Ruby_Activerecord_Rails Activerecord - Fatal编程技术网

Ruby on rails 为什么Rails中的ActiveRecord不支持多表继承?

Ruby on rails 为什么Rails中的ActiveRecord不支持多表继承?,ruby-on-rails,ruby,activerecord,rails-activerecord,Ruby On Rails,Ruby,Activerecord,Rails Activerecord,我试图实现我在纸上组装的一组模型,但遇到了一个问题,我认为最好的方法是使用多表继承设置。然而,在谷歌搜索之后,我发现ActiveRecord不支持MTI。。。尽管有很多文章展示了如何做到这一点。这让我怀疑,如果没有实现,我是否正确地设置了模型。所以我的问题是为什么Active Record没有内置对MTI的支持?如果你想知道我的模型设置会是什么样子,我会把它放在下面 class Player < ActiveRecord::Base; end class CollegePlayer <

我试图实现我在纸上组装的一组模型,但遇到了一个问题,我认为最好的方法是使用多表继承设置。然而,在谷歌搜索之后,我发现ActiveRecord不支持MTI。。。尽管有很多文章展示了如何做到这一点。这让我怀疑,如果没有实现,我是否正确地设置了模型。所以我的问题是为什么Active Record没有内置对MTI的支持?如果你想知道我的模型设置会是什么样子,我会把它放在下面

class Player < ActiveRecord::Base; end
class CollegePlayer < Player; end
class ProPlayer < Player; end
classplayer
其中一名球员可以是学院球员或支撑球员。或者在另一个例子中

class Person < ActiveRecord::Base; end
class User < Person; end
class Player < Person; end
class Coach < Person; end
classperson

如果“人”可能是
用户
、前
玩家
、和/或
教练
,那么对您的问题的简短回答是因为ActiveRecord核心团队不希望包含此功能,同时社区的需求不足。看

如果你想得到明确的答案,你必须问DHH(david.heinemeierhansson.com)或Aaron Tender Love Patterson(tenderlove@github.com)因为他们是活动记录项目的“主要”贡献者

我个人的回答是因为活动记录已经足够复杂了。为支持ActiveRecord已经支持的功能而进行的大量元编程对于维护和扩展来说已经有点困难。目前正在研究AR的核心团队已经将大量精力放在进一步优化AR以加快工作速度和重构AR以清理组织上。考虑到已经有了获得多个表式继承的替代方案,而且社区并不要求使用此功能,因此优先级较低

尽管要评论你关于DB组织正确性的另一个问题,我同意muistooshort的观点,但你似乎可以通过角色实现你想要的。当我第一次从C++中来时,我尝试为不同的对象做单独的模型,并且感觉到强烈的需要去坚持某种复杂的继承方案。你只需要在你的应用程序现在运行时问自己(不是在路上,因为这是一种推测),是不是这些类型之间的行为差异如此之大,从而证明了这种差异程度的合理性

编辑

我与从事活动记录工作的Thoughtbot的Sean Griffin进行了交谈,我问他为什么不支持多表继承,他的回答是:

“多态关联填补了大多数用例的这一角色”

Rails 6.1+委托类型 Rails 6.1添加了一种“本机”方式,通过
委托类型实现多表继承


详情请参见。

我倾向于将“大学球员”视为球员所做的事情(或他们所扮演的角色),而不是他们身份的一部分。同样,如果你有一个人,那么“球员”和“教练”是角色,而不是这个人的固有属性。我认为你的模型设置太过直截了当地接受了“是一个”的概念。@muistoshort你可能是对的,我只是提供了一些额外的信息。我主要是问为什么Active Record中不支持多表继承。嗨!我已经根据你的回答开始了新的话题,也许,你有什么要说的,我会看看的