📖 Scenario: You are building a simple blog application in Rails. To improve performance, you want to cache the homepage and the show page of posts so that users get faster responses.
🎯 Goal: Learn how to implement page caching for the homepage and action caching for the post show page in a Rails app.
📋 What You'll Learn
Create a controller with an index action for the homepage
Create a controller with a show action for posts
Set up page caching for the homepage
Set up action caching for the post show page
💡 Why This Matters
🌍 Real World
Caching pages and actions helps websites load faster by saving rendered content and reusing it for multiple users.
💼 Career
Understanding Rails caching is important for backend developers to optimize web app performance and reduce server load.
Progress0 / 4 steps
1
Create PostsController with index and show actions
Create a Rails controller called PostsController with two actions: index and show. The index action should assign @posts to Post.all. The show action should assign @post to Post.find(params[:id]).
Ruby on Rails
Hint
Use class PostsController < ApplicationController and define index and show methods.
2
Enable page caching for the index action
Add page caching for the index action in PostsController by calling caches_page :index inside the controller class.
Ruby on Rails
Hint
Use caches_page :index inside the controller class but outside any method.
3
Enable action caching for the show action
Add action caching for the show action in PostsController by calling caches_action :show inside the controller class.
Ruby on Rails
Hint
Use caches_action :show inside the controller class but outside any method.
4
Add routes for posts index and show
In the config/routes.rb file, add resourceful routes for posts by writing resources :posts, only: [:index, :show].
Ruby on Rails
Hint
Add resources :posts, only: [:index, :show] inside the Rails.application.routes.draw do ... end block.
Practice
(1/5)
1. What is the main difference between page caching and action caching in Rails?
easy
A. Page caching requires database queries, action caching does not.
B. Page caching saves only JSON data, action caching saves HTML pages.
C. Action caching is faster because it skips filters, page caching runs filters every time.
D. Page caching saves the full HTML page, while action caching saves the controller action output with filters.
Solution
Step 1: Understand what page caching does
Page caching saves the entire HTML page as a static file, so the web server can serve it directly without hitting Rails.
Step 2: Understand what action caching does
Action caching saves the output of a controller action but still runs filters like authentication before serving cached content.
Final Answer:
Page caching saves the full HTML page, while action caching saves the controller action output with filters. -> Option D
Confusing page caching with action caching filters
Thinking action caching saves static files
Assuming page caching runs controller filters
2. Which of the following is the correct syntax to enable page caching for the index action in a Rails controller?
easy
A. caches_page :index
B. cache_page :index
C. page_cache :index
D. enable_page_cache :index
Solution
Step 1: Recall Rails page caching syntax
Rails uses the method caches_page followed by the action name symbol to enable page caching.
Step 2: Verify the correct method name
The correct method is caches_page :index. Other options are invalid method names.
Final Answer:
caches_page :index -> Option A
Quick Check:
Page caching method = caches_page [OK]
Hint: Page caching uses 'caches_page' method with action name [OK]
Common Mistakes:
Using 'cache_page' instead of 'caches_page'
Confusing page caching syntax with action caching
Adding parentheses incorrectly
3. Given this Rails controller snippet with action caching:
class ProductsController < ApplicationController
caches_action :show
before_action :authenticate_user!
def show
@product = Product.find(params[:id])
end
end
What happens when a cached show page is requested by a user who is not authenticated?
medium
A. The user is redirected to login because filters run before serving cached content.
B. The cached page is served directly without authentication check.
C. An error occurs because cache skips filters.
D. The cache is ignored and the action runs fresh.
Solution
Step 1: Understand action caching behavior with filters
Action caching runs controller filters like before_action before serving cached content.
Step 2: Apply to authentication filter
The authenticate_user! filter runs before serving the cached show page, so unauthenticated users are redirected.
Final Answer:
The user is redirected to login because filters run before serving cached content. -> Option A
Quick Check:
Action caching runs filters before cache [OK]
Hint: Action caching runs filters before serving cache [OK]
Common Mistakes:
Thinking cached page skips authentication
Assuming cache serves static files directly
Believing cache is ignored if filters exist
4. You added caches_page :index to your controller but the page does not seem cached. Which of the following is the most likely cause?
medium
A. You forgot to run rake tmp:cache:clear to clear old cache.
B. You need to add skip_before_action for caching to work.
C. Your web server is not configured to serve cached files from public/ directory.
D. Page caching only works with JSON responses.
Solution
Step 1: Understand how page caching serves cached pages
Page caching saves static HTML files in the public/ folder, served directly by the web server.
Step 2: Check web server configuration
If the web server (like Nginx or Apache) is not set to serve files from public/, cached pages won't be served.
Final Answer:
Your web server is not configured to serve cached files from public/ directory. -> Option C
Quick Check:
Web server must serve public/ for page caching [OK]
Hint: Page cache files served by web server from public/ folder [OK]
Common Mistakes:
Assuming Rails serves cached pages directly
Clearing cache without checking server config
Thinking skip_before_action is needed for caching
5. You want to cache the show action of a controller but only for logged-in users, and you want filters like authentication to run before serving cached content. Which caching method should you use and how?
hard
A. Use cache_fragment :show inside the view to cache only parts of the page.
B. Use caches_action :show to cache with filters running before serving.
C. Use caches_page :show because it caches faster and skips filters.
D. Disable caching because caching with authentication is not possible.
Solution
Step 1: Identify caching method that runs filters
Action caching runs filters like authentication before serving cached content, suitable for logged-in user pages.
Step 2: Apply correct syntax for action caching
Use caches_action :show in the controller to cache the action output with filters.
Final Answer:
Use caches_action :show to cache with filters running before serving. -> Option B
Quick Check:
Action caching = cache + filters [OK]
Hint: Action caching runs filters; page caching skips them [OK]
Common Mistakes:
Choosing page caching which skips filters
Confusing fragment caching with action caching
Thinking caching can't work with authentication
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.