Bird
Raised Fist0
Ruby on Railsframework~5 mins

Polymorphic associations in Ruby on Rails - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What is a polymorphic association in Rails?
A polymorphic association lets a model belong to more than one other model using a single association. It uses a type and an ID to link to different models through one interface.
Click to reveal answer
beginner
How do you declare a polymorphic belongs_to association in Rails?
Use belongs_to :attachable, polymorphic: true in the model that belongs to multiple other models.
Click to reveal answer
beginner
What columns are required in the database for a polymorphic association?
You need two columns: one for the ID (e.g., <code>attachable_id</code>) and one for the type (e.g., <code>attachable_type</code>) to store the associated model's class name.
Click to reveal answer
intermediate
How do you set up the other side of a polymorphic association?
Use has_many :attachments, as: :attachable in the models that can have attachments. The as: option tells Rails this is a polymorphic interface.
Click to reveal answer
intermediate
Why use polymorphic associations instead of multiple separate associations?
Polymorphic associations reduce code duplication and database complexity by allowing one model to relate to many others without needing separate foreign keys or tables for each.
Click to reveal answer
Which two columns are essential for a polymorphic association in Rails?
Aattachable_key and attachable_name
Battachable_id and attachable_type
Cattachable_key and attachable_type
Dattachable_id and attachable_name
How do you declare a polymorphic association on the model that belongs to multiple models?
Abelongs_to :attachable, polymorphic: true
Bhas_one :attachable, polymorphic: true
Chas_many :attachable, polymorphic: true
Dbelongs_to :attachable
What does the as: option do in a has_many association?
ADeclares a scope
BSpecifies the foreign key name
CSets the table name
DDefines the polymorphic interface name
Which of these is a benefit of polymorphic associations?
AThey simplify code by using one association for many models
BThey require more database tables
CThey prevent models from sharing associations
DThey only work with one model
If a Comment model belongs to either a Post or a Photo, what would the polymorphic association look like in Comment?
Ahas_many :commentable, polymorphic: true
Bbelongs_to :post_or_photo
Cbelongs_to :commentable, polymorphic: true
Dhas_one :commentable
Explain how polymorphic associations work in Rails and why they are useful.
Think about how one model can connect to many different models using one link.
You got /5 concepts.
    Describe the database setup needed to support a polymorphic association in Rails.
    Focus on the columns that store the link to other models.
    You got /4 concepts.

      Practice

      (1/5)
      1. What is the main purpose of polymorphic associations in Rails?
      easy
      A. To allow a model to belong to more than one other model using a single association
      B. To create a one-to-one relationship between two models
      C. To enforce database constraints on foreign keys
      D. To automatically generate views for multiple models

      Solution

      1. Step 1: Understand polymorphic association concept

        Polymorphic associations let one model belong to multiple other models through a single interface.
      2. Step 2: Compare options with concept

        To allow a model to belong to more than one other model using a single association correctly describes this flexibility. Other options describe unrelated features.
      3. Final Answer:

        To allow a model to belong to more than one other model using a single association -> Option A
      4. Quick Check:

        Polymorphic association = flexible belongs_to [OK]
      Hint: Polymorphic means one interface for many models [OK]
      Common Mistakes:
      • Thinking it creates one-to-one relationships
      • Confusing with database foreign key constraints
      • Assuming it auto-generates views
      2. Which of the following is the correct syntax to declare a polymorphic belongs_to association in a Rails model?
      easy
      A. has_many :commentable, polymorphic: true
      B. has_one :commentable, polymorphic: true
      C. belongs_to :commentable, as: :polymorphic
      D. belongs_to :commentable, polymorphic: true

      Solution

      1. Step 1: Recall belongs_to polymorphic syntax

        The correct syntax uses belongs_to :name, polymorphic: true in the model that belongs to multiple types.
      2. Step 2: Match options with syntax

        belongs_to :commentable, polymorphic: true matches this exactly. Options A and D use wrong association types, and C uses incorrect keyword.
      3. Final Answer:

        belongs_to :commentable, polymorphic: true -> Option D
      4. Quick Check:

        belongs_to with polymorphic: true = belongs_to :commentable, polymorphic: true [OK]
      Hint: belongs_to uses polymorphic: true, has_many uses as: :name [OK]
      Common Mistakes:
      • Using has_many instead of belongs_to for polymorphic
      • Using 'as: :polymorphic' instead of 'polymorphic: true'
      • Confusing has_one with belongs_to
      3. Given these models:
      class Comment < ApplicationRecord
        belongs_to :commentable, polymorphic: true
      end
      
      class Post < ApplicationRecord
        has_many :comments, as: :commentable
      end
      
      class Photo < ApplicationRecord
        has_many :comments, as: :commentable
      end

      What will post.comments.first.commentable_type return if the first comment belongs to a Post?
      medium
      A. "Photo"
      B. "Comment"
      C. "Post"
      D. nil

      Solution

      1. Step 1: Understand polymorphic type storage

        The polymorphic association stores the class name of the associated object in commentable_type.
      2. Step 2: Identify the associated model

        The comment belongs to a Post, so commentable_type will be "Post".
      3. Final Answer:

        "Post" -> Option C
      4. Quick Check:

        commentable_type stores class name = "Post" [OK]
      Hint: commentable_type holds the class name of associated model [OK]
      Common Mistakes:
      • Confusing commentable_type with comment class
      • Expecting the associated object instead of its type string
      • Assuming nil if association exists
      4. You have this model:
      class Picture < ApplicationRecord
        belongs_to :imageable, polymorphic: true
      end

      Which of these will cause an error when creating a Picture?
      medium
      A. Picture.create(imageable_type: nil, imageable_id: 2)
      B. Picture.create(imageable_type: "Product", imageable_id: 2)
      C. Picture.create(imageable_type: "User", imageable_id: 1)
      D. Picture.create(imageable_type: "User", imageable_id: 3)

      Solution

      1. Step 1: Check required polymorphic keys

        Polymorphic belongs_to requires both imageable_type and imageable_id to be present for a valid association.
      2. Step 2: Identify missing or nil values

        Picture.create(imageable_type: nil, imageable_id: 2) has imageable_type: nil, which breaks the association and causes an error.
      3. Final Answer:

        Picture.create(imageable_type: nil, imageable_id: 2) -> Option A
      4. Quick Check:

        Missing polymorphic type causes error [OK]
      Hint: Both type and id must be present for polymorphic belongs_to [OK]
      Common Mistakes:
      • Assuming nil imageable_type is acceptable
      • Ignoring missing type causes runtime error
      • Confusing polymorphic keys with normal foreign keys
      5. You want to add comments to both Articles and Events using polymorphic associations. Which setup correctly models this?
      hard
      A. class Comment < ApplicationRecord belongs_to :article belongs_to :event end
      B. class Comment < ApplicationRecord belongs_to :commentable, polymorphic: true end class Article < ApplicationRecord has_many :comments, as: :commentable end class Event < ApplicationRecord has_many :comments, as: :commentable end
      C. class Comment < ApplicationRecord has_many :articles has_many :events end
      D. class Article < ApplicationRecord belongs_to :comment end class Event < ApplicationRecord belongs_to :comment end

      Solution

      1. Step 1: Identify polymorphic association pattern

        Comments belong to a polymorphic commentable interface, allowing multiple models to share comments.
      2. Step 2: Match correct model declarations

        class Comment < ApplicationRecord belongs_to :commentable, polymorphic: true end class Article < ApplicationRecord has_many :comments, as: :commentable end class Event < ApplicationRecord has_many :comments, as: :commentable end correctly uses belongs_to :commentable, polymorphic: true in Comment and has_many :comments, as: :commentable in Article and Event.
      3. Final Answer:

        polymorphic belongs_to and has_many as: :commentable -> Option B
      4. Quick Check:

        Polymorphic belongs_to + has_many as: = class Comment < ApplicationRecord belongs_to :commentable, polymorphic: true end class Article < ApplicationRecord has_many :comments, as: :commentable end class Event < ApplicationRecord has_many :comments, as: :commentable end [OK]
      Hint: Use belongs_to polymorphic in child, has_many as: in parents [OK]
      Common Mistakes:
      • Trying to belongs_to both models separately
      • Using has_many in Comment instead of belongs_to
      • Assigning belongs_to comment in parent models
      Recommended

      Ready to prove it?

      Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

      10 questions~5 mineasy hard