The belongs_to relationship connects one model to another, showing that one item belongs to a single parent item.
When a comment belongs to a single post in a blog.
When an order belongs to a specific customer in a store.
When a book belongs to one author in a library system.
When a profile belongs to a user account.
Syntax
Ruby on Rails
class ChildModel < ApplicationRecord
belongs_to :parent_model
end
The child model uses belongs_to to link to the parent model.
This sets up methods to access the parent from the child.
Examples
This means each comment is linked to one post.
Ruby on Rails
class Comment < ApplicationRecord
belongs_to :post
end
Each order belongs to a single customer.
Ruby on Rails
class Order < ApplicationRecord
belongs_to :customer
end
A profile is connected to one user account.
Ruby on Rails
class Profile < ApplicationRecord
belongs_to :user
end
Sample Program
This example shows a post with many comments. Each comment belongs to one post. When we print comment.post.title, it shows the title of the post the comment belongs to.
Ruby on Rails
class Post < ApplicationRecord
has_many :comments
end
class Comment < ApplicationRecord
belongs_to :post
end
# Usage example in Rails console
post = Post.create(title: "Hello World")
comment = Comment.create(body: "Nice post!", post: post)
puts comment.post.title
OutputSuccess
Important Notes
Always add a foreign key column (e.g., post_id) in the child table for belongs_to to work.
Rails 5+ requires belongs_to associations to be present by default, meaning the child must have a parent.
Summary
belongs_to links a child model to one parent model.
It creates easy access from child to parent.
Use it when one item clearly belongs to another single item.
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.