# Inheritance vs Polymorphism: Design Question for "IS A"

**URL:** <https://www.ruby-forum.com/t/inheritance-vs-polymorphism-design-question-for-is-a/164419>\
**Category:** Rails\
**Created:** [April 1, 2009, 9:33am UTC](https://www.ruby-forum.com/t/inheritance-vs-polymorphism-design-question-for-is-a/164419 "2009-04-01T09:33:52Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![kinunt](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/7c8e57/32.png) [@kinunt](https://www.ruby-forum.com/u/kinunt)\
**Post date:** [April 1, 2009, 9:33am UTC](https://www.ruby-forum.com/t/inheritance-vs-polymorphism-design-question-for-is-a/164419/1 "2009-04-01T09:33:52Z")

</div>

Hi!

I have the next abstract composition:

Organization  
ConsultingFirm IS A Organization  
Client IS A Organization

User  
ConsultingFirmUser IS A User  
ClientUser IS A User

ConsultingFirmUser BELONGS TO ConsultingFirm  
ClientUser BELONGS TO Client

ConsultingFirm HAS MANY ConsultingFirmUsers  
Client HAS MANY ClientUsers

I don’t know how is the best way of implementing the “IS A” relationship  
in Rails. What would you use? Inheritance or Polymorphism?

Thanks!

---

<div class="post-metadata">

**Author:** ![kinunt](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/7c8e57/32.png) [@kinunt](https://www.ruby-forum.com/u/kinunt)\
**Post date:** [April 1, 2009, 11:46pm UTC](https://www.ruby-forum.com/t/inheritance-vs-polymorphism-design-question-for-is-a/164419/2 "2009-04-01T23:46:51Z")

</div>

On Wed, Apr 1, 2009 at 2:33 AM, Juan K.  
[removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) wrote:

> ConsultingFirm HAS MANY ConsultingFirmUsers  
> Client HAS MANY ClientUsers
> 
> I don’t know how is the best way of implementing the “IS A” relationship  
> in Rails. What would you use? Inheritance or Polymorphism?

I would use a roles table and join model between users and roles.

–  
Greg D.  
[http://destiney.com/](http://destiney.com/)

---

<div class="post-metadata">

**Author:** ![kinunt](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/7c8e57/32.png) [@kinunt](https://www.ruby-forum.com/u/kinunt)\
**Post date:** [April 3, 2009, 3:29am UTC](https://www.ruby-forum.com/t/inheritance-vs-polymorphism-design-question-for-is-a/164419/3 "2009-04-03T03:29:16Z")

</div>

Juan K. wrote:

> I don’t know how is the best way of implementing the “IS A” relationship  
> in Rails. What would you use? Inheritance or Polymorphism?

There are two primary solutions provided by rails for this:

1: Single Table Inheritance (STI)  
2: Polymorphic relationships.

The primary determining factor is how similar are the “subclasses” to  
the abstract class. By this I mean do the subclasses add just a few  
additional attributes to the superclass or do they add a lot. In the  
former case STI may fit the bill very well and in the latter you’re  
probably better off using a polymorphic relationship.

Google the two key words (STI and “Polymorphic Relationship”) and you  
should find lots of information to help you decide what’s best in your  
case. That is if either one fits, which I think one of them will.
