public
Description: Rails / ActiveRecord - Hide attributes in a model (particularly useful for Single Table Inheritance)
Homepage:
Clone URL: git://github.com/ggonnella/attr_hidden.git
attr_hidden / README
100644 64 lines (42 sloc) 1.582 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
59
60
61
62
63
64
This is a Rails plugin, which was created for Rails 2.1
but might work also for other Rails versions.
 
It does not contain unit tests, so if you would like to
collaborate, this would be a nice addition.
 
Although this plugin does not require STI, it is probably
only really useful with single table inheritance.
 
Example usage with STI
======================
 
Let's use the example of STI given by Martin Fowler at:
http://www.martinfowler.com/eaaCatalog/singleTableInheritance.html
 
table players:
name, club, batting_average, bowling_average, type
 
type may be: Footballer, Cricketer, Bowler
 
The attribute bowling_average will always be NULL in any record with type
Cricketer or Footballer. The same is true for club in Cricketer or Bowler.
 
so using ActiveRecord you have:
 
class Player < ActiveRecord::Base
end
 
class Footballer < Player
end
 
class Cricketer < Player
end
 
class Bowler < Cricketer
end
 
however when you use an object of the class Bowler you can still access "club",
which make sense only for Footballer; this plugin comes in hand in this situation.
 
The point of this plugin is to hide from the object instance in the
object-relational mapping the columns which are anyway always NULL in some
of these classes.
 
using attr_hidden:
 
class Player < ActiveRecord::Base
end
 
class Footballer < Player
  attr_hidden :batting_average, :bowling_average
end
 
class Cricketer < Player
  attr_hidden :club, :bowling_average
end
 
class Bowler < Cricketer
  attr_not_hidden :bowling_average
end
 
now each class sees only the columns which are meaningful for them.