The Active Record pattern helps you work with your database easily by connecting your data to simple objects. It lets you save, find, and update data without writing complex database code.
When you want to create, read, update, or delete data in a database using simple Ruby objects.
When building a web app that needs to store user information, like sign-up details.
When you want to keep your database code organized and easy to understand.
When you want to link database tables to Ruby classes automatically.
When you want to use built-in methods to query and manage data without writing SQL.
Syntax
Ruby on Rails
class ModelName < ApplicationRecord
# Your code here
end
Each model class represents a table in the database.
Model instances represent rows in that table.
Examples
This creates a User model linked to the users table.
Ruby on Rails
class User < ApplicationRecord
end
This creates a new user object and saves it to the database.
Ruby on Rails
user = User.new(name: "Alice", email: "alice@example.com")
user.save
This finds a user by ID, changes their email, and saves the update.
Ruby on Rails
user = User.find(1)
user.email = "new_email@example.com"
user.save
Sample Program
This example shows how to create, find, update, and display a product using Active Record.
Ruby on Rails
class Product < ApplicationRecord
end
# Create a new product
product = Product.new(name: "Book", price: 15.99)
product.save
# Find the product by id
found_product = Product.find(product.id)
# Update the product price
found_product.price = 12.99
found_product.save
# Output product details
puts "Product: #{found_product.name}, Price: $#{found_product.price}"
OutputSuccess
Important Notes
Active Record automatically maps class names to table names (e.g., Product to products).
Use migrations to create or change database tables safely.
Always call save to store changes in the database.
Summary
Active Record connects Ruby classes to database tables for easy data handling.
It lets you create, read, update, and delete data using simple Ruby code.
It helps keep your database work clean and organized without writing SQL.
Practice
(1/5)
1. What is the main purpose of the Active Record pattern in Rails?
easy
A. To link Ruby classes with database tables for easy data management
B. To create user interfaces with Ruby code
C. To handle HTTP requests and responses
D. To style web pages using CSS
Solution
Step 1: Understand Active Record's role
Active Record connects Ruby classes to database tables, making data handling easier.
Step 2: Compare options to this role
Only To link Ruby classes with database tables for easy data management describes this connection; others describe unrelated tasks.
Final Answer:
To link Ruby classes with database tables for easy data management -> Option A
Quick Check:
Active Record = Ruby class to DB table link [OK]
Hint: Active Record links Ruby classes to tables [OK]
Common Mistakes:
Confusing Active Record with view or controller roles
Thinking it handles HTTP or styling
Assuming it writes SQL directly
2. Which of the following is the correct way to find a record by its ID using Active Record?
easy
A. User.find_by_id(5)
B. User.where(id: 5).first!
C. User.find(5)
D. User.get(5)
Solution
Step 1: Recall Active Record find methods
The method find fetches a record by its ID directly.
Step 2: Check each option
User.find(5) uses find(5), which is correct. User.find_by_id(5) is deprecated. User.where(id: 5).first! is valid but less direct. User.get(5) is invalid.
Final Answer:
User.find(5) -> Option C
Quick Check:
Use find(id) to get record by ID [OK]
Hint: Use find(id) to get record by ID [OK]
Common Mistakes:
Using deprecated find_by_id instead of find
Using invalid method names like get
Confusing where.first! with find for simple ID lookup
3. Given the code:
user = User.find(3)
user.update(name: "Alice")
puts user.name
What will be printed?
medium
A. Alice
B. An error message
C. nil
D. 3
Solution
Step 1: Understand the update method
The update method changes the record's attributes and saves it.
Step 2: Check the output of puts user.name
After updating, user.name is "Alice", so it prints "Alice".
Final Answer:
Alice -> Option A
Quick Check:
update changes attribute, then prints new value [OK]
Hint: update changes and saves record attributes [OK]
Common Mistakes:
Thinking update returns the ID
Assuming update does not save changes
Expecting nil or error without reason
4. What is wrong with this code snippet?
post = Post.find(10)
post.title = "New Title"
post.save!
medium
A. Using save! will not save changes
B. No error; this code correctly updates the post title
C. Assigning title directly is not allowed
D. find(10) returns an array, not a single record
Solution
Step 1: Analyze the code actions
The code finds a post by ID, changes its title, then saves it with save!.
Step 2: Check if any step is invalid
Assigning attributes directly and using save! is valid and will update the record.
Final Answer:
No error; this code correctly updates the post title -> Option B
Quick Check:
Direct attribute assignment + save! updates record [OK]
Hint: Direct attribute change + save! updates record [OK]
Common Mistakes:
Thinking save! does not save changes
Believing find returns an array
Assuming direct assignment is forbidden
5. You want to get all users who signed up after January 1, 2023, and order them by their signup date descending. Which Active Record query is correct?
hard
A. User.select_all.where(created_at > '2023-01-01').order_desc('created_at')
B. User.find_by(created_at: '> 2023-01-01').sort(created_at: :desc)
C. User.filter(created_at > '2023-01-01').order_by('created_at desc')
D. User.where('created_at > ?', '2023-01-01').order(created_at: :desc)
Solution
Step 1: Identify correct where syntax
Active Record uses where('created_at > ?', date) to filter by date.
Step 2: Identify correct order syntax
Ordering is done with order(created_at: :desc) for descending order.
Step 3: Compare options
Only User.where('created_at > ?', '2023-01-01').order(created_at: :desc) uses correct where and order syntax; others use invalid or non-existent methods.
Final Answer:
User.where('created_at > ?', '2023-01-01').order(created_at: :desc) -> Option D
Quick Check:
where + order with symbols = correct query [OK]
Hint: Use where with ? and order with symbol for sorting [OK]
Common Mistakes:
Using find_by instead of where for multiple records
Using non-existent methods like filter or order_desc
Incorrect syntax in where clause
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.