Before you go, check out these stories!

Hackernoon logoUnderstanding Rails Polymorphic Active Record Associations by@Addo

Understanding Rails Polymorphic Active Record Associations

Author profile picture


Full-Stack Web Developer

Brief Introduction

To understand Rails Polymorphic Association, let us refresh our minds on Rails Active Record. What is Rails Active Record?

Rails Active Record is the M in the MVC architecture framework. The model which is the layer of the system responsible for representing business logic and data. Active Record facilitates the creation and use of business objects whose data requires persistent storage to a database.

It is an implementation of the Active Record Pattern which itself is a description of an Object Relational Mapping System.

Polymorphic Association is an Active Record Association that can connect a model to multiple other models. For example; we can use a single association to connect a Post model with Comment and Like models, allowing us to query the Post model.

Let get on with the code, first, we create a rails app

rails new post_app

This command will generate the basic files we need. Now we will generate 3 models as seen in the diagram above. Steps in creating our model are described below:

rails g model Post content:string image:string like_id:integer comment_id:integer

This command will create a migration file for the post with the specified columns.

rails g model Comment content:string

This command creates a migration file for the comment with the specified column => content, rails will add a default id for every model, in this case, rails will generate a comment_id

rails g model Like content:string

Now, it is time we add our associations to our model.


class Like < ApplicationRecord
has_many :comments<br>has_many :likes


class Comment &lt; ApplicationRecord
belongs_to :post


class Like &lt; ApplicationRecord
belongs_to :post

So now, we have all our model and polymorphic association setup. The next step is to migrate our migration files with the command below

rails db:migrate

This command will create a schema.rb file in our db/schema.rb where we have all our 3 tables setup

Now, we can test our association with the help of the rails console. Type

rails c

To open the rails console. Now we can create post with the following command

p1 = Post.create(content: 'my first post', image: 'free.png')

This command will create and save a post in the variable p1. When we type p1, we should have the details of the post

&lt;Post id:1, content: 'my first post', image: 'free.png'&gt;

Now let us create our comment by assigning our first comment to a variable

c1 = Comment.create(content: 'the post is awesome')

This command will throw an error because the comment is associated with the post, so in order to fix this. Let check the command below

c1 = Comment.create(content: 'the post is awesome', post_id: 1)

With the post_id as the argument, the comment is now created successfully.

Now let us create 1 like as we did with the comment.

l1 = 'i like the post', post_id: 1)

This command will create the like without saving it, so we need to save it with the command

This is why I like using the ‘create’ method in this article. Now we can play around the models and associations in the console. For more information and details explanation, let us visit the rails documentation

If you like this article - share it with friends. Thank you for reading. My next article will be about Javascript Async and Await. Until then have a great coding day


Join Hacker Noon

Create your free account to unlock your custom reading experience.