Rails Multi Table Inheritance, Полиморфная ассоциация или Single Table Inheritance?

Я пытаюсь реализовать эталонную модель OpenEHR в Rails (ActiveRecord), но я нахожу некоторые проблемы, так как она работает с множеством различных классов,

Вот схема Композиции:

Композиционная диаграмма

Как видите, многие классы "наследуют" пару атрибутов от Locatable или же Pathable* (вся ссылка огромна, и почти каждый класс наследуется от нее).

Кроме того, он устанавливает data_types как другие классы, например, в том же классе композиции, language это класс CODE_PHRASE, которые имеют два атрибута ( ссылка).

Поэтому я сталкиваюсь с двумя проблемами: 1) как я могу наследовать атрибуты от абстрактных классов, и 2) как я могу "включать" нужные "классы".

Для первой проблемы я подумал об использовании полиморфных ассоциаций.

Во-вторых, я подумал об использовании STI, но я быстро нахожу много почти похожих моделей (на самом деле они абсолютно одинаковые): CompositionLanguage, CompositionTerritory, EntrySetting, EntryEncoding что я использую только в type например, атрибут "обратная связь": класс композиции может иметь до трех атрибутов с CODE_PHRASEпоскольку все три ссылаются на разные атрибуты (язык, территорию и категорию), я подумал, что мне нужно знать об ассоциациях (нет смысла знать, что в Composition есть 3 code_phrases, но я не знал, какой из них является соответствующим атрибутом). С другой стороны, Entry класс, есть setting а также encoding атрибут ( ссылка).

Я понимаю, что могут быть разные подходы, но я действительно хотел бы знать, не было ли это возможно для Rails (или ActiveRecord). Или, может быть, мне не хватает концептуальной информации.

2 ответа

Спецификация openEHR RM имеет глубоко вложенное наследование и составные шаблоны с древовидной иерархией.

Я не мог реализовать это вложенное наследование ActiveRecord. Следующая реализация является примером для моделирования openEHR RM. Я был бы очень рад, если бы этот пример мог вам помочь.

https://github.com/skoba/openehr_rm_rails

Вы смотрели на этот проект.. https://github.com/skoba/openehr-rails

Я думаю, что Синдзи использует Active Record.

Лично, учитывая сложную структуру openEHR RM, если бы я начинал, я мог бы использовать что-то вроде MongoDB с ORM.

Я указал техническому сообществу openehr на ваш вопрос в техническом списке openehr, чтобы узнать, могут ли помочь другие.

Ян

Другие вопросы по тегам