user = User.find(1)
user.update(email: "newemail@example.com")
Sample Program
This example shows all CRUD steps: create a user, read it, update the name, then delete it. Finally, it checks if the user still exists.
Ruby on Rails
class User < ApplicationRecord
end
# Create a user
user = User.create(name: "Bob", email: "bob@example.com")
# Read the user
found_user = User.find(user.id)
# Update the user
found_user.update(name: "Bobby")
# Delete the user
found_user.destroy
puts User.exists?(user.id)
OutputSuccess
Important Notes
Always handle exceptions when using find to avoid app crashes if record is missing.
Use update to change only the fields you want.
destroy removes the record from the database permanently.
Summary
CRUD stands for Create, Read, Update, Delete.
Rails models make CRUD easy and clean.
Use model methods like create, find, update, and destroy to manage data.
Practice
(1/5)
1. Which Rails model method is used to add a new record to the database?
easy
A. create
B. find
C. update
D. destroy
Solution
Step 1: Understand CRUD operations
CRUD means Create, Read, Update, Delete. Each operation has a matching Rails model method.
Step 2: Match method to action
create adds a new record, find reads, update changes, and destroy deletes.
Final Answer:
create -> Option A
Quick Check:
Create = create [OK]
Hint: Create means adding new data, so use create [OK]
Common Mistakes:
Confusing find with create
Using update to add new records
Trying to delete with create
2. Which of the following is the correct syntax to update a user's email in Rails?
easy
A. user.change(email = 'new@example.com')
B. user.update(email: 'new@example.com')
C. user.modify(email: 'new@example.com')
D. user.edit(email => 'new@example.com')
Solution
Step 1: Recall Rails update syntax
The correct method to change attributes is update with a hash of attributes.
Step 2: Check syntax correctness
user.update(email: 'new@example.com') uses symbol keys and colon, which is correct Ruby syntax.
Final Answer:
user.update(email: 'new@example.com') -> Option B
Quick Check:
Update syntax = user.update(hash) [OK]
Hint: Use update with symbol keys and colon for attributes [OK]
Common Mistakes:
Using assignment (=) inside method arguments
Using non-existent methods like change or modify
Wrong hash syntax like email => instead of email:
3. Given the code:
user = User.find(1)
user.destroy
puts User.exists?(1)
What will be printed?
medium
A. An error
B. true
C. nil
D. false
Solution
Step 1: Understand what destroy does
destroy deletes the record from the database permanently.
Step 2: Check if record exists after deletion
User.exists?(1) returns false because the user with ID 1 was deleted.
Final Answer:
false -> Option D
Quick Check:
Destroy removes record, so exists? returns false [OK]
Hint: Destroy deletes record; check existence returns false after [OK]
Common Mistakes:
Thinking destroy only marks record inactive
Assuming exists? returns true after deletion
Confusing destroy with delete (which skips callbacks)
4. Identify the error in this code snippet:
user = User.find_by(id: 10)
user.update(name: 'Alice')
medium
A. No error, code works fine
B. find_by should be find to work
C. find_by returns nil if no record found, so calling update on nil causes error
D. update method does not accept hash arguments
Solution
Step 1: Understand find_by behavior
find_by returns nil if no matching record is found.
Step 2: Check method call on nil
Calling update on nil causes a NoMethodError because nil has no update method.
Final Answer:
find_by returns nil if no record found, so calling update on nil causes error -> Option C
Quick Check:
Nil object has no update method [OK]
Hint: Check if find_by returns nil before calling methods [OK]
Common Mistakes:
Assuming find_by always returns a record
Thinking update cannot take hash arguments
Confusing find and find_by behavior
5. You want to update multiple users' status to 'active' only if their current status is 'pending'. Which Rails code correctly does this in one query?
hard
A. User.where(status: 'pending').update_all(status: 'active')
B. User.update_all(status: 'active').where(status: 'pending')
C. User.find_each { |u| u.update(status: 'active') if u.status == 'pending' }
D. User.all.update(status: 'active') if User.status == 'pending'
Solution
Step 1: Filter users with status 'pending'
User.where(status: 'pending') selects only users with 'pending' status.
Step 2: Update all selected users at once
update_all(status: 'active') updates the status for all filtered users in one database query.
Final Answer:
User.where(status: 'pending').update_all(status: 'active') -> Option A
Quick Check:
Filter then update_all = efficient bulk update [OK]
Hint: Use where to filter, then update_all to bulk update [OK]
Common Mistakes:
Calling update_all before filtering
Using find_each which is slower for bulk updates
Trying to chain where after update_all
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.