paint-brush
Understanding Rails Polymorphic Active Record Associationsby@Addo
652 reads
652 reads

Understanding Rails Polymorphic Active Record Associations

by DanielMay 31st, 2020
Read on Terminal Reader
Read this story w/o Javascript
tldt arrow

Too Long; Didn't Read

Understanding Ruby Ruby's Active Record Pattern. 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. My next article will be about Javascript Async and Await Tags. For more information and details, let us visit the rails documentation here: http://guides.rubyonrails.org/active_record_basics.html.

Company Mentioned

Mention Thumbnail
featured image - Understanding Rails Polymorphic Active Record Associations
Daniel HackerNoon profile picture

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.

post.rb

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

comment.rb

class Comment &lt; ApplicationRecord
belongs_to :post
end

like.rb

class Like &lt; ApplicationRecord
belongs_to :post
end

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 = Like.new(content: '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

l1.save

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 https://guides.rubyonrails.org/active_record_basics.html

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