0
0
Ruby on Railsframework~20 mins

Eager loading (N+1 prevention) in Ruby on Rails - Practice Problems & Coding Challenges

Choose your learning style9 modes available
Challenge - 5 Problems
🎖️
Eager Loading Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
component_behavior
intermediate
2:00remaining
What is the output count of queries executed?
Given the following Rails code, how many SQL queries will be executed when rendering the posts and their comments count?

posts = Post.all
posts.each do |post|
  puts post.comments.count
end
Ruby on Rails
posts = Post.all
posts.each do |post|
  puts post.comments.count
end
A1 + N queries (N = number of posts)
B1 query
CN queries
D2 queries
Attempts:
2 left
💡 Hint
Think about how Rails loads associations by default.
📝 Syntax
intermediate
2:00remaining
Which code snippet correctly eager loads comments for posts?
Select the Rails code that correctly eager loads comments to prevent N+1 queries when accessing post.comments.
Aposts = Post.preload(:comments).where(comments: { approved: true })
Bposts = Post.joins(:comments).all
Cposts = Post.includes(:comments).all
Dposts = Post.eager_load(:comments).where('comments.created_at > ?', 1.week.ago)
Attempts:
2 left
💡 Hint
Look for the method that loads associations in one query or minimal queries.
🔧 Debug
advanced
2:00remaining
Why does this eager loading code still cause N+1 queries?
Consider this code snippet:

posts = Post.includes(:comments)
posts.each do |post|
  puts post.comments.where(approved: true).count
end

Why does it still cause multiple queries?
Ruby on Rails
posts = Post.includes(:comments)
posts.each do |post|
  puts post.comments.where(approved: true).count
end
ABecause filtering with where on association triggers a new query per post
BBecause includes does not load comments at all
CBecause count always triggers a single query for all posts
DBecause posts is not loaded before iteration
Attempts:
2 left
💡 Hint
Think about how where on an association affects eager loading.
🧠 Conceptual
advanced
2:00remaining
What is the main difference between includes and preload in Rails?
Choose the statement that best describes the difference between includes and preload methods for eager loading associations.
Aincludes only works with belongs_to, preload only with has_many
Bincludes always loads associations in separate queries, preload uses JOIN
Cincludes and preload are identical in behavior and performance
Dincludes uses LEFT OUTER JOIN, preload loads associations in separate queries
Attempts:
2 left
💡 Hint
Think about how each method loads associated records.
state_output
expert
2:00remaining
What is the output of this Rails console code regarding query count?
Given the following code in Rails console, what will be the total number of SQL queries executed?

ActiveRecord::Base.logger = Logger.new(STDOUT)
posts = Post.eager_load(:comments).where(comments: { approved: true }).distinct
posts.each do |post|
  puts post.comments.size
end
Ruby on Rails
ActiveRecord::Base.logger = Logger.new(STDOUT)
posts = Post.eager_load(:comments).where(comments: { approved: true }).distinct
posts.each do |post|
  puts post.comments.size
end
A2 queries
B1 query
CN + 1 queries
DNo queries
Attempts:
2 left
💡 Hint
eager_load uses JOIN and loads all data in one query.