Rails多表继承,多态关联或单表继承?

时间:2015-01-12 19:29:16

标签: ruby-on-rails activerecord model data-modeling openehr

我正在尝试在Rails(ActiveRecord)中实现OpenEHR参考模型,但我发现了一些问题,因为它适用于许多不同的classess,

以下是Composition

的图表

Composition diagram

正如您所看到的,很多类“继承”了LocatablePathable *中的几个属性(整个引用很大,几乎每个类都继承自它)。

此外,它将data_types建立为其他类,例如在同一个组合类中,language是类CODE_PHRASE,它有两个属性(link)。

因此我遇到两个问题1)如何从抽象类继承属性,以及2)我如何“包含”所需的“类”。

我在使用多态关联时遇到的第一个问题。

对于第二个,我想过使用STI,但我很快发现了很多几乎相似的模型(实际上它们完全相同):CompositionLanguageCompositionTerritory,{{1} },EntrySetting我只在EntryEncoding属性中使用“链接回来”,例如:组合类,最多可以有三个属性type,因为所有三个属性都引用了不同的属性(语言,领域和类别),我认为我需要知道关联(没有必要知道Composition有3个code_phrases,但我不知道哪个是相应的属性)。另一方面,CODE_PHRASE类具有Entrysetting属性(link)。

我意识到可能有不同的方法,但我真的想知道是否可能是Rails(或ActiveRecord)。或者,也许我错过了概念信息。

2 个答案:

答案 0 :(得分:5)

openEHR RM规范具有深层嵌套的继承和具有树层次结构的复合模式。

我无法通过ActiveRecord实现此嵌套继承。以下实现是模拟openEHR RM的示例。 如果这个例子可以帮到你,我会很高兴。

https://github.com/skoba/openehr_rm_rails

答案 1 :(得分:1)

你看过这个项目吗? https://github.com/skoba/openehr-rails

我认为真嗣使用Active Record。

就个人而言,鉴于openEHR RM的复杂结构,如果我刚开始使用,我可能会尝试使用带有ORM的MongoDB。

我已通过openehr技术列表向openehr技术社区指出了您的问题,看看其他人是否可以提供帮助。

伊恩