Rails自我联接一个联接表以用于多个模型

问题描述 投票:0回答:2

在Rails中实现简单的自联接的问题有很多答案。我的问题有点复杂。

我有很多型号。医生,诊所,治疗等。医生可以有类似的医生。一个诊所可以有类似的诊所等等。我可以为每个模型实现单独的自联接,但这将导致代码重复。有没有一种方法可以让一个桌子自行加入不同的模型?我认为解决方案在于在联接表上或作为中间表使用多态关联,但是我似乎无法提供有效的代码。

ruby-on-rails polymorphic-associations self-join
2个回答
0
投票

对多态关联说不。是的,它们使您可以欺骗关系数据库模型,并适合那些您的“行为”需要与大量不同类共享的特殊情况。就像在图书馆一样。实际上,尽管多态性无法解决,但是多列/表是无法做到的(可以说更好)。

最大的缺点是,多态关联在数据库中没有任何实际的外键。这意味着数据库不保证引用完整性。还有很多与加入,渴望加载有关的问题,以及它的抽象性很差的事实,例如在订购时。

与良好的可靠数据库设计相比,代码重复确实应该成为第二要务。您还应该考虑这样的事实,即联接不仅仅是管道。在许多情况下,联接表本身就是一个实体,并描述实体之间的关系。就像您实际上可能想要跟踪医生在诊所等工作了多长时间。如果构建大型企业,那么多项目联接表都必须在需求改变时重新进行设计。


-1
投票

我最近问了一个类似的问题,它是以下问题的重复:Rails "undefined method for ActiveRecord_Associations_CollectionProxy"

© www.soinside.com 2019 - 2024. All rights reserved.