Bird
Raised Fist0
Ruby on Railsframework~20 mins

has_many relationship in Ruby on Rails - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
HasMany Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
What does this Rails code output when accessing associated records?
Given the following models, what will user.posts.count return after running the code below?
Ruby on Rails
class User < ApplicationRecord
  has_many :posts
end

class Post < ApplicationRecord
  belongs_to :user
end

user = User.create(name: "Alice")
user.posts.create(title: "First Post")
user.posts.create(title: "Second Post")

result = user.posts.count
A2
B0
C1
DRaises an error
Attempts:
2 left
💡 Hint
Remember that has_many sets up a collection of associated records.
📝 Syntax
intermediate
1:30remaining
Which option correctly defines a has_many association in Rails?
Select the correct syntax to define a has_many association from User to Post.
A
class User &lt; ApplicationRecord
  has_many posts
end
B
class User &lt; ApplicationRecord
  has_many 'posts'
end
C
class User &lt; ApplicationRecord
  has_many :post
end
D
class User &lt; ApplicationRecord
  has_many :posts
end
Attempts:
2 left
💡 Hint
The association name should be a symbol and plural for has_many.
🔧 Debug
advanced
2:30remaining
Why does this has_many association not load related records?
Given these models, why does user.posts return an empty array even though posts exist in the database?
Ruby on Rails
class User < ApplicationRecord
  has_many :posts
end

class Post < ApplicationRecord
  belongs_to :author
end

user = User.first
posts = user.posts
AThe posts table is empty, so no posts exist.
BThe User model should use has_one instead of has_many.
CThe Post model's belongs_to uses :author instead of :user, so the association is broken.
DThe user variable is nil, so no posts can be loaded.
Attempts:
2 left
💡 Hint
Check if the foreign key and association names match between models.
❓ state_output
advanced
2:00remaining
What is the value of post.user.name after this code runs?
Consider these models and code. What will post.user.name output?
Ruby on Rails
class User < ApplicationRecord
  has_many :posts
end

class Post < ApplicationRecord
  belongs_to :user
end

user = User.create(name: "Bob")
post = Post.create(title: "Hello", user: user)

result = post.user.name
Anil
B"Bob"
CRaises NoMethodError
D"Hello"
Attempts:
2 left
💡 Hint
The post belongs to the user created with name "Bob".
🧠 Conceptual
expert
3:00remaining
Which statement about has_many associations is true?
Select the correct statement about Rails has_many associations.
AA has_many association always requires a foreign key in the associated model's table.
Bhas_many associations automatically create database indexes on foreign keys.
Chas_many associations can only be used with models that have a belongs_to association back.
Dhas_many associations do not support dependent option for cascading deletes.
Attempts:
2 left
💡 Hint
Think about how Rails links models in a has_many relationship.

Practice

(1/5)
1. What does the has_many association in Rails represent?
easy
A. One model is linked to many instances of another model
B. One model belongs to exactly one other model
C. Models share a many-to-many relationship without a join table
D. It creates a database index automatically

Solution

  1. Step 1: Understand the purpose of has_many

    The has_many association is used to link one model to many instances of another model.
  2. Step 2: Compare with other associations

    belongs_to links one model to one other model, and many-to-many requires has_many :through or has_and_belongs_to_many.
  3. Final Answer:

    One model is linked to many instances of another model -> Option A
  4. Quick Check:

    has_many means one-to-many [OK]
Hint: Remember: has_many means one model owns many others [OK]
Common Mistakes:
  • Confusing has_many with belongs_to
  • Thinking has_many creates database indexes
  • Mixing up many-to-many with has_many
2. Which of the following is the correct syntax to declare a has_many association in a Rails model?
easy
A. has_many => :comments
B. has_many = comments
C. has_many :comments
D. has_many('comments')

Solution

  1. Step 1: Recall Rails association syntax

    Rails uses the syntax has_many :association_name without equals or arrows.
  2. Step 2: Check each option

    has_many :comments uses the correct symbol and syntax. Options B, C, and D use invalid Ruby syntax for associations.
  3. Final Answer:

    has_many :comments -> Option C
  4. Quick Check:

    Correct Rails association syntax = has_many :comments [OK]
Hint: Use symbol and colon: has_many :model_name [OK]
Common Mistakes:
  • Using equals sign instead of colon
  • Using hash rockets => in association
  • Calling has_many like a method with parentheses
3. Given these models:
class Author < ApplicationRecord
  has_many :books
end

class Book < ApplicationRecord
  belongs_to :author
end

What will author.books.count return if the author has 3 books?
medium
A. 3
B. 0
C. nil
D. An error because books is undefined

Solution

  1. Step 1: Understand the association setup

    The Author model has many books, and each Book belongs to an author.
  2. Step 2: Check the method call

    author.books.count counts all books linked to that author. If there are 3 books, it returns 3.
  3. Final Answer:

    3 -> Option A
  4. Quick Check:

    author.books.count = number of linked books [OK]
Hint: Count returns how many related records exist [OK]
Common Mistakes:
  • Expecting count to return nil or zero incorrectly
  • Confusing belongs_to with has_many behavior
  • Assuming books method is undefined
4. Identify the error in this code snippet:
class Library < ApplicationRecord
  has_many :books
end

class Book < ApplicationRecord
  has_many :library
end
medium
A. No error, code is correct
B. Library should use belongs_to :books
C. has_many should be replaced with has_one in Library
D. Book should use belongs_to :library, not has_many

Solution

  1. Step 1: Check association pairing

    has_many on one side must pair with belongs_to on the other side for one-to-many.
  2. Step 2: Identify the mistake

    The Book model incorrectly uses has_many :library. It should be belongs_to :library.
  3. Final Answer:

    Book should use belongs_to :library, not has_many -> Option D
  4. Quick Check:

    has_many pairs with belongs_to [OK]
Hint: has_many pairs with belongs_to, not has_many [OK]
Common Mistakes:
  • Using has_many on both sides
  • Swapping belongs_to and has_many
  • Using singular instead of plural for has_many
5. You want to list all comments for a post and also count how many comments have the word 'help' in them. Given:
class Post < ApplicationRecord
  has_many :comments
end

class Comment < ApplicationRecord
  belongs_to :post
end

Which code correctly gets the count of comments containing 'help' for a post instance post?
hard
A. post.comments.find_all { |c| c.content.include?('help') }
B. post.comments.where("content LIKE ?", "%help%").count
C. post.comments.count("content LIKE '%help%'")
D. post.comments.select { |c| c.content == 'help' }.count

Solution

  1. Step 1: Use ActiveRecord query for filtering

    To count comments containing 'help', use where with SQL LIKE and then count.
  2. Step 2: Analyze each option

    post.comments.where("content LIKE ?", "%help%").count uses correct SQL syntax and chaining. post.comments.count("content LIKE '%help%'") misuses count with a condition string. post.comments.find_all { |c| c.content.include?('help') } loads all comments and filters in Ruby but returns an array, not the count. post.comments.select { |c| c.content == 'help' }.count checks exact match, not substring.
  3. Final Answer:

    post.comments.where("content LIKE ?", "%help%").count -> Option B
  4. Quick Check:

    Use where with LIKE and count for filtered count [OK]
Hint: Use where with LIKE and count for filtered results [OK]
Common Mistakes:
  • Using count with a condition string incorrectly
  • Filtering with exact match instead of substring
  • Filtering in Ruby instead of database query
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