public
Description: ActiveRecord Multiple InheriTance
Homepage: http://swissrb.rubyforge.org
Clone URL: git://github.com/kschiess/armit.git
restorm (author)
Mon Mar 31 13:51:11 -0700 2008
commit  103cae75196634dde50673191c6e23632d827add
tree    9c1a32d961ddc5e00c07c05b752b0175ceba9899
parent  e42f6f3a828e9910a690b3df8d99e5f3b7f8e8fb
armit / README.txt
100644 58 lines (39 sloc) 2.704 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
= SYNOPSIS
 
Armit stands for ActiveRecord Multiple Table Inheritance and helps you do just that. Some people also call this Class
Table Inheritance (http://www.martinfowler.com/eaaCatalog/classTableInheritance.html).
 
You should start out with a STI hierarchy of ActiveRecord models. You can then augment each subclass of your hierarchy
with something we call an 'attributes'-table. Together, they form a multi table inheritance layer. This layer permits
access of multiple tables as if they were one single table.
 
= DESCRIPTION
 
For a conceptual model like this:
 
                                                Account
                                                   ^
                                        ___________|____________
                                        | |
                                      Group User
                                      
You would create the following database tables:
 
  accounts (this contains all the STI stuff)
  group_attributes Additional attributes for Group
  user_attributes Additional attributes for User
  
And connect it like this in your STI layer:
 
 
                                                Account
                                                   ^
                                        ___________|____________
                                        | |
                  GroupAttribute ---- Group User ---- UserAttribute
 
Account, Group and User would be stored in accounts, and then you'd probably create has_one relationships to attributes,
on each side.
 
With armit, you can now use your models the way you draw your conceptual model. Attributes are folded back into the
dependent classes:
 
                                                Account
                                                   ^
                                        ___________|____________
                                        | |
                                      Group User
 
If there is something you could do with the STI-Models, chances are that it will work with the brand new shiny MTI-Models
too. We've got everything you need for CRUD and then some.
 
= THANKS
 
Go out to Severin 'can_it_do_this_or_that' Schoepke who put up with ARMIT long before it was feature complete. And to the
rest of the pack - thanks for sharing my goals!
 
= AUTHORS AND LEGALESE
 
armit was written by Florian Hanke, Kaspar Schiess and Severin Schoepke, restorm.com, 2007. For licensing information refer to the file LICENSE.