# Inheritance

**URL:** <https://www.ruby-forum.com/t/inheritance/185997>\
**Category:** Rails\
**Created:** [March 30, 2010, 9:21am UTC](https://www.ruby-forum.com/t/inheritance/185997 "2010-03-30T09:21:10Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![brianp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/94ad74/32.png) [@brianp](https://www.ruby-forum.com/u/brianp)\
**Post date:** [March 30, 2010, 9:21am UTC](https://www.ruby-forum.com/t/inheritance/185997/1 "2010-03-30T09:21:10Z")

</div>

I’ve done some reading on Single Table Inheritance.

I think I need something a little more though.

Classic example.

class Animal \< ActiveRecord::Base  
// db fields:  
name: string  
age: int  
type: string  
breed: string  
end

class Feline \< Animal  
// db fields:  
whisker\_count: int  
end

class Canine \< Animal  
// db fields:  
seeing\_eye\_dog: boolean  
end

So how do Canine and Feline inherit the fields from Animal although  
they don’t require each others fields. Does the Animals table just  
contain all the fields but value can be null and only returns the  
available fields for that Model?

Cheers,

---

<div class="post-metadata">

**Author:** ![brianp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/94ad74/32.png) [@brianp](https://www.ruby-forum.com/u/brianp)\
**Post date:** [March 30, 2010, 9:25am UTC](https://www.ruby-forum.com/t/inheritance/185997/2 "2010-03-30T09:25:16Z")

</div>

yes, the Animal contains all the field and if you create a Feline  
instance  
as feline, seeing\_eye\_dog will be left empty.

---

<div class="post-metadata">

**Author:** ![brianp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/94ad74/32.png) [@brianp](https://www.ruby-forum.com/u/brianp)\
**Post date:** [March 30, 2010, 9:31am UTC](https://www.ruby-forum.com/t/inheritance/185997/3 "2010-03-30T09:31:42Z")

</div>

Hmmm… This could lead to 60+ blank fields a record (for that  
table). Is that bad design, is there a better method I should explore?  
Or is this just normal and I should go with it?

---

<div class="post-metadata">

**Author:** ![brianp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/94ad74/32.png) [@brianp](https://www.ruby-forum.com/u/brianp)\
**Post date:** [March 30, 2010, 9:41am UTC](https://www.ruby-forum.com/t/inheritance/185997/4 "2010-03-30T09:41:05Z")

</div>

I am sorry that i do not have too much ideas about whether STI(Single  
Table  
Inheritance) are good or not, it depends.

here is article(not mine) you could refer:

[http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html](http://code.alexreisner.com/articles/single-table-inheritance-in-rails.html)

I hope that could help you

---

<div class="post-metadata">

**Author:** ![brianp](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/b/94ad74/32.png) [@brianp](https://www.ruby-forum.com/u/brianp)\
**Post date:** [March 30, 2010, 10:03am UTC](https://www.ruby-forum.com/t/inheritance/185997/5 "2010-03-30T10:03:55Z")

</div>

Thanks for your replies Yong Gu. I believe the article was exactly the  
information I was seeking.

Cheers,  
brianp
