Bird
Raised Fist0
Ruby on Railsframework~30 mins

Callbacks overview in Ruby on Rails - Mini Project: Build & Apply

Choose your learning style10 modes available
Callbacks overview in Rails
📖 Scenario: You are building a simple Rails model to manage books in a library. You want to automatically set some values and run checks when books are created or updated.
🎯 Goal: Learn how to use Rails callbacks to run code before and after saving a record.
📋 What You'll Learn
Create a Rails model with attributes
Add a callback to set a default value before saving
Add a callback to print a message after saving
Use the correct Rails callback methods
💡 Why This Matters
🌍 Real World
Callbacks in Rails models help automate common tasks like setting default values or logging changes without repeating code.
💼 Career
Understanding callbacks is essential for Rails developers to write clean, maintainable code that reacts to data changes automatically.
Progress0 / 4 steps
1
Create the Book model with attributes
Create a Rails model class called Book that inherits from ApplicationRecord and has attributes title and status.
Ruby on Rails
Hint

Use attr_accessor to define attributes for this example.

2
Add a before_save callback to set default status
Add a before_save callback in the Book model that sets status to 'available' if it is nil.
Ruby on Rails
Hint

Use before_save :set_default_status and define the method set_default_status.

3
Add an after_save callback to print a message
Add an after_save callback in the Book model that calls a method print_saved_message which prints 'Book saved successfully'.
Ruby on Rails
Hint

Use after_save :print_saved_message and define the method print_saved_message with a puts statement.

4
Complete the Book model with callbacks
Ensure the Book model includes attr_accessor :title, :status, the before_save :set_default_status callback, and the after_save :print_saved_message callback with their respective methods.
Ruby on Rails
Hint

Review all previous steps and ensure the model has all parts combined correctly.

Practice

(1/5)
1. What is the main purpose of callbacks in Rails models?
easy
A. To run code automatically at specific points in a model's life
B. To manually call methods from controllers
C. To style the HTML output of views
D. To handle database migrations

Solution

  1. Step 1: Understand what callbacks do

    Callbacks are hooks that run code automatically during certain model events like saving or deleting.
  2. Step 2: Identify the correct purpose

    Callbacks help automate tasks at specific points in a model's lifecycle, not manual calls or styling.
  3. Final Answer:

    To run code automatically at specific points in a model's life -> Option A
  4. Quick Check:

    Callbacks = automatic code run [OK]
Hint: Callbacks run code automatically at model events [OK]
Common Mistakes:
  • Confusing callbacks with controller methods
  • Thinking callbacks style views
  • Mixing callbacks with database migrations
2. Which of the following is the correct syntax to define a callback that runs before saving a record?
easy
A. on_save :method_name
B. after_save :method_name
C. before_save do method_name end
D. before_save :method_name

Solution

  1. Step 1: Recall callback syntax

    Rails uses before_save :method_name to run a method before saving a record.
  2. Step 2: Check other options

    after_save runs after saving, on_save is invalid, and the block syntax is incorrect here.
  3. Final Answer:

    before_save :method_name -> Option D
  4. Quick Check:

    before_save syntax = before_save :method_name [OK]
Hint: Use before_save :method_name to run code before saving [OK]
Common Mistakes:
  • Using after_save instead of before_save
  • Trying to use on_save which doesn't exist
  • Incorrect block syntax for callbacks
3. Given this model code:
class User < ApplicationRecord
  before_create :set_default_role

  def set_default_role
    self.role ||= 'guest'
  end
end

What will be the role of a new User if none is set before saving?
medium
A. 'guest'
B. 'admin'
C. nil
D. Raises an error

Solution

  1. Step 1: Understand before_create callback

    The before_create callback runs the method set_default_role before the record is created in the database.
  2. Step 2: Analyze set_default_role method

    The method sets self.role to 'guest' only if it is currently nil or falsey (using ||=).
  3. Final Answer:

    'guest' -> Option A
  4. Quick Check:

    before_create sets role to 'guest' if none set [OK]
Hint: before_create sets default values if none exist [OK]
Common Mistakes:
  • Assuming role stays nil if not set
  • Confusing before_create with after_create
  • Thinking it raises an error without role
4. Identify the error in this callback definition:
class Post < ApplicationRecord
  before_save :check_title

  def check_title
    if title.blank?
      errors.add(:title, "can't be blank")
      throw :abort
    end
  end
end
medium
A. Using throw :abort is incorrect to stop save
B. No error, this is correct usage
C. Callback method should be private
D. errors.add should be errors.add_error

Solution

  1. Step 1: Review callback usage

    The before_save callback runs check_title before saving.
  2. Step 2: Check error handling

    Adding errors and using throw :abort is the correct way to stop saving if validation fails.
  3. Final Answer:

    No error, this is correct usage -> Option B
  4. Quick Check:

    throw :abort stops save correctly [OK]
Hint: Use throw :abort to halt save in callbacks [OK]
Common Mistakes:
  • Thinking throw :abort is invalid
  • Believing errors.add needs a different method
  • Assuming callback methods must be private
5. You want to run a method log_update only after a record is updated but not created. Which callback should you use?
hard
A. before_save
B. after_save
C. after_update
D. before_update

Solution

  1. Step 1: Understand callback timing

    after_save runs after both create and update, but after_update runs only after updates.
  2. Step 2: Choose callback for updates only

    Since you want to run log_update only after updates, after_update is the correct choice.
  3. Final Answer:

    after_update -> Option C
  4. Quick Check:

    after_update runs only after updates [OK]
Hint: Use after_update for actions only after updates [OK]
Common Mistakes:
  • Using after_save which runs on create too
  • Choosing before_update which runs before update
  • Confusing before_save with after_update
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