Building a Simple Blog Post Model with Active Record
📖 Scenario: You are creating a simple blog application. You want to store blog posts with a title and content in a database using Rails' Active Record pattern.
🎯 Goal: Build a Rails model called Post using Active Record that can save and retrieve blog posts with a title and content.
📋 What You'll Learn
Create a Post model inheriting from ApplicationRecord
Add attributes title and content to the model
Create a new Post instance with a title and content
Save the Post instance to the database
💡 Why This Matters
🌍 Real World
Active Record is the main way Rails applications interact with databases to create, read, update, and delete data.
💼 Career
Understanding Active Record is essential for Rails developers building web applications that store and manage data.
Progress0 / 4 steps
1
Create the Post model
Create a Rails model class called Post that inherits from ApplicationRecord.
Ruby on Rails
Hint
In Rails, models inherit from ApplicationRecord to use Active Record features.
2
Add attributes to the Post model
Assume the database table posts has columns title and content. No code change is needed here because Active Record automatically maps these columns to attributes.
Ruby on Rails
Hint
Active Record automatically provides attribute accessors for database columns.
3
Create a new Post instance
Create a new Post instance called post with title set to 'My First Post' and content set to 'Hello, this is my first blog post.'.
Ruby on Rails
Hint
Use Post.new with a hash of attributes to create a new instance.
4
Save the Post instance
Call the save method on the post instance to save it to the database.
Ruby on Rails
Hint
Use save to store the new record in the database.
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.