📖 Scenario: You are building a simple blog application where each Comment belongs to a Post. This means every comment is linked to exactly one post.
🎯 Goal: Create a Comment model that correctly uses the belongs_to relationship to associate each comment with a post.
📋 What You'll Learn
Create a Post model with a title attribute
Create a Comment model with a content attribute
Add a belongs_to :post association in the Comment model
Add a has_many :comments association in the Post model
💡 Why This Matters
🌍 Real World
This pattern is common in blog platforms, forums, and social media apps where items like comments, reviews, or replies belong to a main post or item.
💼 Career
Understanding belongs_to and has_many associations is essential for Rails developers to model database relationships correctly and build functional web applications.
Progress0 / 4 steps
1
Create the Post model with a title
Create a Rails model called Post with a string attribute title.
Ruby on Rails
Hint
Use rails generate model Post title:string to create the model with the title attribute.
2
Create the Comment model with content and post reference
Create a Rails model called Comment with a string attribute content and a reference to post (foreign key).
Ruby on Rails
Hint
Use rails generate model Comment content:string post:references to create the model with the correct attributes.
3
Add belongs_to association in Comment model
In the Comment model, add the line belongs_to :post to set up the association.
Ruby on Rails
Hint
Use belongs_to :post inside the Comment class.
4
Add has_many association in Post model
In the Post model, add the line has_many :comments to complete the two-way association.
Ruby on Rails
Hint
Use has_many :comments inside the Post class.
Practice
(1/5)
1. What does the belongs_to association in Rails indicate about the relationship between two models?
easy
A. It creates a many-to-many relationship between two models.
B. The model with belongs_to is the parent and links to many child models.
C. It automatically creates a database table for the association.
D. The model with belongs_to is the child and links to one parent model.
Solution
Step 1: Understand the role of belongs_to
The belongs_to association is used in the child model to link it to a single parent model.
Step 2: Identify the relationship direction
This means the child model holds the foreign key and points to one parent, not many.
Final Answer:
The model with belongs_to is the child and links to one parent model. -> Option D
Quick Check:
belongs_to = child to one parent [OK]
Hint: Remember: belongs_to means child points to one parent [OK]
Common Mistakes:
Confusing belongs_to with has_many
Thinking belongs_to creates many-to-many
Assuming belongs_to creates a new table
2. Which of the following is the correct syntax to declare a belongs_to association in a Rails model named Comment that belongs to a Post?
easy
A. belongs_to :post
B. belongs_to Post
C. has_many :post
D. belongs_to 'post'
Solution
Step 1: Recall Rails association syntax
In Rails, associations use symbols for model names, so belongs_to :post is correct.
Step 2: Check other options for syntax errors
belongs_to Post lacks symbol, has_many is wrong association, and quotes are not standard here.
Final Answer:
belongs_to :post -> Option A
Quick Check:
Use symbol for model name in belongs_to [OK]
Hint: Use symbol (colon) for model name in belongs_to [OK]
Common Mistakes:
Using class name without colon
Using has_many instead of belongs_to
Using string instead of symbol
3. Given the following Rails models:
class Comment < ApplicationRecord
belongs_to :post
end
class Post < ApplicationRecord
has_many :comments
end
What will comment.post return if comment is a Comment instance linked to a Post with title "Hello"?
medium
A. The Post object with title "Hello"
B. An array of comments
C. A string "Hello"
D. nil
Solution
Step 1: Understand belongs_to usage
The belongs_to :post means each comment has one post object accessible via comment.post.
Step 2: Identify what comment.post returns
It returns the Post instance linked to that comment, which has the title "Hello".
Final Answer:
The Post object with title "Hello" -> Option A
Quick Check:
comment.post returns parent Post object [OK]
Hint: belongs_to returns the single parent object [OK]
Common Mistakes:
Expecting an array instead of single object
Expecting a string instead of object
Assuming nil when association exists
4. You have this model code:
class Order < ApplicationRecord
belongs_to :customer
end
When running order.customer, you get an error: undefined method 'customer'. What is the most likely cause?
medium
A. The Customer model is not defined.
B. The belongs_to should be has_many.
C. The customer_id column is missing in the orders table.
D. The association name should be plural: belongs_to :customers.
Solution
Step 1: Check database foreign key presence
The belongs_to :customer requires a customer_id column in the orders table to work.
Step 2: Understand error cause
If customer_id is missing, Rails cannot create the method customer, causing the error.
Final Answer:
The customer_id column is missing in the orders table. -> Option C
Hint: Check foreign key column exists for belongs_to [OK]
Common Mistakes:
Confusing belongs_to with has_many
Assuming association name should be plural
Ignoring missing database column
5. You want to create a Rails app where each Review belongs to a Product, and each product can have many reviews. You also want to ensure deleting a product deletes its reviews automatically. Which setup is correct?
hard
A. In Review model: belongs_to :product, dependent: :destroy In Product model: has_many :reviews
B. In Review model: belongs_to :product In Product model: has_many :reviews, dependent: :destroy
C. In Review model: has_many :product In Product model: belongs_to :reviews, dependent: :destroy
D. In Review model: belongs_to :product In Product model: has_many :reviews, dependent: :nullify
Solution
Step 1: Assign belongs_to in child model
The Review model should have belongs_to :product to link each review to one product.
Step 2: Use has_many with dependent option in parent
The Product model should have has_many :reviews, dependent: :destroy to delete reviews when product is deleted.