Inheritance with rails

Hello.
I’ve read about examples on inheritance with rails.
Here is an example:

The way is to add a type field in the table.
So if I have an Animal class with an attribute name, I can inherit
from this class like:

Dog < Animal, Cat < Animal, and so on.

With the type field in the table I can do Dog.all, Cat.all having
automaticaly all dogs, all cats, etc.
But what if I want to add some other attributes to Dog or Cat classes?
In the example above all classes have only name attribute.
What if I want inherit from Animal extending attributes and adding,
for example, an attribute like canFly? for inherited classes?

On 3 May 2012 15:28, Mauro [email protected] wrote:

Dog < Animal, Cat < Animal, and so on.

With the type field in the table I can do Dog.all, Cat.all having
automaticaly all dogs, all cats, etc.
But what if I want to add some other attributes to Dog or Cat classes?
In the example above all classes have only name attribute.
What if I want inherit from Animal extending attributes and adding,
for example, an attribute like canFly? for inherited classes?

Hi,

You can add columns to the animals table that only some classes use.
IMHO
this is not a nice solution.

I have written the SuperSTI gem that I think offers a nicer solution.
Read
about it at http://www.ihid.co.uk/projects/super_sti and
GitHub - iHiD/super_sti: Add extra data to SDI models yet maintain clean database tables.

Feel free to email me personally to discuss it further.

Jeremy W.
http://www.ihid.co.uk

On 3 May 2012 16:41, Jeremy W. [email protected] wrote:

What if I want inherit from Animal extending attributes and adding,
http://www.ihid.co.uk/projects/super_stiandhttps://github.com/ihid/super_sti

Feel free to email me personally to discuss it further.

It creates a table for every inherited class.
So in my example I must have a table animals, a table dogs and a table
cats.
It’s the same if I create different models: Animal, Dog, Cat without
using inheritance.

On 3 May 2012 15:49, Mauro [email protected] wrote:

But what if I want to add some other attributes to Dog or Cat classes?
I have written the SuperSTI gem that I think offers a nicer solution.
It’s the same if I create different models: Animal, Dog, Cat without
using inheritance.

No, it creates an animals table, and then creates extra linked tables
for
any extra attributes. So you’d create an animals table with all the
shared
attributes, then a dogs table that only has the extra attributes on
there.
So you don’t have any duplication, and don’t have a load of nullable
columns on a super table.