4
votes

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

2 Answers

5
votes

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

1
votes

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