Bird
Raised Fist0
Ruby on Railsframework~20 mins

Russian doll caching in Ruby on Rails - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Russian Doll Caching Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
Understanding nested cache behavior in Rails views

Given a Rails view with nested cache blocks implementing Russian doll caching, what will be the output behavior when the inner cache key changes but the outer cache key remains the same?

Ruby on Rails
<% cache ['outer', @post.updated_at] do %>
  Outer content
  <% cache ['inner', @comment.updated_at] do %>
    Inner comment content
  <% end %>
<% end %>
AOnly the inner cache block is re-rendered; the outer cache block is reused from cache.
BBoth inner and outer cache blocks are re-rendered because the inner key changed.
COnly the outer cache block is re-rendered; the inner cache block is ignored.
DNeither cache block is re-rendered; both are reused from cache regardless of key changes.
Attempts:
2 left
💡 Hint

Think about how nested caches work independently in Russian doll caching.

📝 Syntax
intermediate
2:00remaining
Correct syntax for Russian doll caching in Rails partials

Which option shows the correct syntax to implement Russian doll caching in a Rails partial that caches a post and its comments separately?

A
&lt;% cache @post do %&gt;
  &lt;%= render @post %&gt;
  &lt;% cache @post.comments %&gt;
    &lt;%= render @post.comments %&gt;
  &lt;% end %&gt;
&lt;% end %&gt;
B
&lt;%= cache @post do %&gt;
  &lt;%= render @post %&gt;
  &lt;%= cache @post.comments do %&gt;
    &lt;%= render @post.comments %&gt;
  &lt;% end %&gt;
&lt;% end %&gt;
C
&lt;% cache @post do %&gt;
  &lt;%= render @post %&gt;
  &lt;% cache @post.comments do %&gt;
    &lt;%= render @post.comments %&gt;
  &lt;% end %&gt;
&lt;% end %&gt;
D
&lt;%= cache @post do %&gt;
  &lt;%= render @post %&gt;
  &lt;% cache @post.comments %&gt;
    &lt;%= render @post.comments %&gt;
  &lt;% end %&gt;
&lt;% end %&gt;
Attempts:
2 left
💡 Hint

Remember that cache with a block uses <% %> tags, not <%= %>.

🔧 Debug
advanced
2:00remaining
Identifying why nested Russian doll caching is not working

A developer notices that when a comment is updated, the inner cache block updates correctly, but the outer cache block never expires even when the post is updated. What is the most likely cause?

AThe outer cache key does not include the post's <code>updated_at</code> timestamp, so it never expires.
BThe inner cache block is missing a cache key, so it always re-renders.
CThe developer used <code>cache_if</code> instead of <code>cache</code> for the outer block.
DThe Rails cache store is disabled, so no caching happens at all.
Attempts:
2 left
💡 Hint

Check what keys are used for cache expiration.

❓ state_output
advanced
2:00remaining
Cache key generation with nested Russian doll caching

Given the following code, what is the cache key generated for the inner cache block?

<% cache ['post', post.id, post.updated_at] do %>
  <% cache ['comment', comment.id, comment.updated_at] do %>
    Comment content
  <% end %>
<% end %>
AA string like "views/post/123-20240101" ignoring the inner cache key.
BA string like "views/post/123-20240101/comment/456-20240102" combining both keys.
CA string like "views/post/123-20240101/comment/123-20240101" mixing post and comment IDs.
DA string like "views/comment/456-20240102" based only on the inner cache key.
Attempts:
2 left
💡 Hint

Each cache block generates its own key independently.

🧠 Conceptual
expert
3:00remaining
Why use Russian doll caching in Rails applications?

Which of the following best explains the main advantage of using Russian doll caching in Rails views?

AIt caches the entire page as a single fragment, making cache management simpler but less flexible.
BIt allows caching of nested view fragments independently, so only changed parts are re-rendered, improving performance and reducing unnecessary rendering.
CIt automatically invalidates all caches when any nested model changes, ensuring data consistency at the cost of performance.
DIt replaces the need for database query caching by storing all query results in the view cache.
Attempts:
2 left
💡 Hint

Think about how nested caching affects rendering efficiency.

Practice

(1/5)
1. What is the main purpose of Russian doll caching in Rails?
easy
A. To cache nested parts of a page separately for faster updates
B. To cache the entire page as a single block
C. To disable caching for nested components
D. To cache only the database queries

Solution

  1. Step 1: Understand caching scope

    Russian doll caching caches nested parts of a page separately, not the whole page at once.
  2. Step 2: Identify the benefit

    This allows only changed parts to be updated, speeding up page rendering.
  3. Final Answer:

    To cache nested parts of a page separately for faster updates -> Option A
  4. Quick Check:

    Russian doll caching = nested caching [OK]
Hint: Think nested caching updates only changed parts [OK]
Common Mistakes:
  • Confusing with full page caching
  • Thinking it disables caching
  • Assuming it caches only queries
2. Which syntax correctly uses Russian doll caching in a Rails view?
easy
A. <% cache @post do %> <% cache @comment do %> ... <% end %> <% end %>
B. <% cache do @post, @comment %> ... <% end %>
C. <% cache @post + @comment do %> ... <% end %>
D. <% cache @post && @comment do %> ... <% end %>

Solution

  1. Step 1: Check nested cache blocks

    Russian doll caching uses nested cache blocks for each object separately.
  2. Step 2: Validate syntax correctness

    <% cache @post do %> <% cache @comment do %> ... <% end %> <% end %> correctly nests cache @post and inside it cache @comment blocks.
  3. Final Answer:

    <% cache @post do %> <% cache @comment do %> ... <% end %> <% end %> -> Option A
  4. Quick Check:

    Nested cache blocks = correct syntax [OK]
Hint: Look for nested cache blocks with separate objects [OK]
Common Mistakes:
  • Trying to cache multiple objects in one block incorrectly
  • Using operators like + or && inside cache call
  • Not nesting cache blocks properly
3. Given this Rails view code snippet, what will happen when @comment is updated but @post is unchanged?
<% cache @post do %>
  <p>Post content</p>
  <% cache @comment do %>
    <p>Comment content</p>
  <% end %>
<% end %>
medium
A. Both post and comment caches are expired and re-rendered
B. Only the comment cache is expired and re-rendered
C. Only the post cache is expired and re-rendered
D. Neither cache is expired; page stays the same

Solution

  1. Step 1: Understand cache dependencies

    Russian doll caching nests caches so inner caches expire independently from outer caches.
  2. Step 2: Apply update effect

    Updating @comment expires only the comment cache, not the post cache.
  3. Final Answer:

    Only the comment cache is expired and re-rendered -> Option B
  4. Quick Check:

    Inner cache update = inner cache expired [OK]
Hint: Only changed nested cache re-renders, outer stays [OK]
Common Mistakes:
  • Assuming outer cache always expires with inner
  • Thinking no cache expires on update
  • Confusing which cache block is affected
4. Identify the error in this Rails view code using Russian doll caching:
<% cache @post do %>
  <p>Post content</p>
<% cache @comment %>
  <p>Comment content</p>
<% end %>
<% end %>
medium
A. Extra end keyword causing syntax error
B. Nested cache blocks cannot be used
C. Incorrect variable names for caching
D. Missing block for inner cache call

Solution

  1. Step 1: Check inner cache syntax

    The inner cache @comment call lacks a block (no do ... end).
  2. Step 2: Understand block requirement

    Cache calls must have a block to define cached content; missing block causes error.
  3. Final Answer:

    Missing block for inner cache call -> Option D
  4. Quick Check:

    Cache calls need blocks [OK]
Hint: Always use do ... end with cache blocks [OK]
Common Mistakes:
  • Omitting block for cache call
  • Misplacing end keywords
  • Assuming cache works without block
5. You want to implement Russian doll caching for a blog page with posts and comments. Which approach best ensures only changed comments or posts update their cache without re-rendering the whole page?
hard
A. Use cache @post.comments once for all comments without nesting
B. Cache the entire blog page in one cache block with a combined key
C. Nest cache @post do blocks around each post and inside nest cache comment do blocks for each comment
D. Disable caching for comments and cache only posts

Solution

  1. Step 1: Understand nested caching strategy

    Russian doll caching works best by nesting cache blocks for each object separately.
  2. Step 2: Apply to posts and comments

    Wrapping each post in a cache block and nesting comment cache blocks inside allows independent expiration.
  3. Step 3: Evaluate other options

    Other options either cache too broadly or disable caching, losing efficiency.
  4. Final Answer:

    Nest cache @post do blocks around each post and inside nest cache comment do blocks for each comment -> Option C
  5. Quick Check:

    Nested cache blocks for each object = best practice [OK]
Hint: Nest cache blocks per object for fine-grained updates [OK]
Common Mistakes:
  • Caching entire page at once
  • Caching all comments together without nesting
  • Disabling caching for parts
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