table inheritance in rails

Hello,

Suppose I have 2 models Human and Person and I want to inherit one from another so that I could use 'human' model/migration as a generic builder for smiliar objects as 'person', for instance this with the following table structure:

human table: id weight size

person table: id name surname address

Is it possible to make such table inheritance in rails to be able to have 'base' model for those that are submodels with different columns?

Thanks in advance!

Hello,

Suppose I have 2 models Human and Person and I want to inherit one from

another so that I could use ‘human’ model/migration as a generic builder

for smiliar objects as ‘person’, for instance this with the following

table structure:

human table:

id

weight

size

person table:

id

name

surname

address

Is it possible to make such table inheritance in rails to be able to

have ‘base’ model for those that are submodels with different columns?

Thanks in advance!

Yes, this is possible in Rails. Thus, you can read section 19.4 of AWDwR 3rd edition. It

provides an excellent example of what one would do to achieve table inheritance in Rails.

Good luck,

-Conrad

Aljaz Fajmut wrote:

Hello,

Suppose I have 2 models Human and Person and I want to inherit one from another so that I could use 'human' model/migration as a generic builder for smiliar objects as 'person',

Your data modeling is faulty. Human is not a sub- or superclass of Person; rather, they're near synonyms.

for instance this with the following table structure:

human table: id weight size

person table: id name surname address

Where's the inheritance here? There are no fields in common except id. What do you actually want to do?

Is it possible to make such table inheritance in rails to be able to have 'base' model for those that are submodels with different columns?

Well, there's single-table inheritance (see the Rails docs), but it's seldom a good idea...

Thanks in advance!

Best,

Aljaz Fajmut wrote:

It might not be the best example but I couldnt think of better one in the moment in wrote this. I have a clear image of what I want to implement.

Then you should be able to explain it more clearly. :slight_smile:

Is this single or multi-table inheritance?

They're functionally more or less equivalent, although single-table inheritance is rather a perversion of the relational model. The choice between the two usually seems to be made on practical grounds.

Thanks for help

Best,

It might not be the best example but I couldnt think of better one in

the moment in wrote this. I have a clear image of what I want to

implement.

Is this single or multi-table inheritance?

You can implement this as single table inheritance because a RDBMS

doesn’t support multi-table inheritance (i.e.one cannot inherit the fields

of another table). If this is what you’re looking for, then you’ll need an

OODB which represents things as object graphs instead of table rows.

Lastly, Marnen is correct in saying that Person and Human are synonyms

of one another and I recommend reading up on object oriented design.

Good luck,

-Conrad

If I understand your question correctly, you need to build the right relationships. If you lived in the Star Trek universe, you might have:

    class Person < ActiveRecord::Base   belongs_to :race     end     class Race < ActiveRecord::Base   has_many :people     end

where @person.race.name should return "human" if you've populated the race table and created a foreign key in person named "race_id".