Rails Multi Table Inheritance, Polymorphic association or Single Table Inheritance?

485 views Asked by At

I'm trying to implement the OpenEHR reference model in Rails (ActiveRecord), but I'm finding some problems, since it works with a lot of different of different classess,

Here is the diagram of a Composition:

Composition diagram

As you can see, a lot of classes "inherit" a couple of attributes from Locatable or Pathable* (the whole reference is huge, and almost every class inherit from it).

Also, it establish data_types as other classes, for example in the same composition class, language is class CODE_PHRASE, that have two attributes (link).

Therefore I encounter two problems 1) how can I inherit attributes from abstract classes, and 2) how is that I can "include" the needed "classes".

For the first problem I thought in using Polymorphic Associations.

For the second one, I thought using STI, but I'm quickly finding a lot of almost similar models (they are exactly the same actually): CompositionLanguage, CompositionTerritory, EntrySetting, EntryEncoding that I only use in the type attribute to "link back", for example: The composition class, can have up to three attributes with CODE_PHRASE, since all three references a different attribute (language, territory and category), I thought that I needed to know for the associations (there's no point in knowing that Composition has 3 code_phrases, but I didn't know which one is the corresponding attribute). On the other hand, the Entry class, have the setting and encoding attribute (link).

I realize that there could be different approaches, but I would really like to know if that maybe Rails (or ActiveRecord), wasn't made for this. Or, maybe I'm missing conceptual info.

2

There are 2 answers

0
Shinji KOBAYASHI On

The openEHR RM specification has deeply nested inheritance and composite patterns with tree hierarchy.

I could not implement this nested inheritance by ActiveRecord. The following implementation is an example to simulate openEHR RM. I would be very happy if this example could help you.

https://github.com/skoba/openehr_rm_rails

0
Ian McNicoll On

Have you looked at this project .. https://github.com/skoba/openehr-rails

I think Shinji uses Active Record.

Personally, given the complex structure of the openEHR RM, if I was starting out I might look to use something like MongoDB with an ORM.

I have pointed the openehr technical community to your question via the openehr technical list to see if others can help.

Ian