📖 Scenario: You are building a simple Rails app to manage a bookstore. You have a list of books stored in the database with details like title, author, and price.You want to practice extracting specific information from the books using Rails ActiveRecord methods.
🎯 Goal: Learn how to use select to filter records and pluck to extract specific fields from the database in Rails.
📋 What You'll Learn
Create a Book model with attributes: title (string), author (string), price (integer)
Use select to filter books priced above a certain amount
Use pluck to get a list of book titles from the filtered books
💡 Why This Matters
🌍 Real World
Filtering and extracting specific data from a database is common in web apps like bookstores, inventory systems, or user management.
💼 Career
Understanding select and pluck helps you write efficient Rails queries to get exactly the data you need without extra processing.
Progress0 / 4 steps
1
Create the books data
Create a variable called books and assign it an array of hashes representing books with these exact entries: { title: 'Ruby Basics', author: 'Alice', price: 30 }, { title: 'Rails Advanced', author: 'Bob', price: 50 }, { title: 'JavaScript Guide', author: 'Carol', price: 40 }.
Ruby on Rails
Hint
Use an array of hashes with the exact keys and values given.
2
Set the price threshold
Create a variable called price_threshold and set it to 35.
Ruby on Rails
Hint
Just assign the number 35 to the variable price_threshold.
3
Filter books with select
Create a variable called expensive_books and assign it the result of using select on books to keep only books where the price is greater than price_threshold.
Ruby on Rails
Hint
Use select with a block that checks if book[:price] is greater than price_threshold.
4
Extract titles with pluck
Create a variable called titles and assign it the result of using pluck on expensive_books to get an array of their title values.
Ruby on Rails
Hint
Use map with a block to extract the :title from each book hash.
Practice
(1/5)
1. What is the main difference between select and pluck in Rails ActiveRecord?
easy
A. select returns all columns, pluck returns only the first column.
B. select returns model objects with selected columns, pluck returns an array of values.
C. select modifies the database, pluck deletes records.
D. select returns an array of values, pluck returns model objects.
Solution
Step 1: Understand select behavior
select loads model objects but only with the specified columns, so you still get ActiveRecord objects.
Step 2: Understand pluck behavior
pluck fetches column values directly from the database and returns them as a simple array, not objects.
Final Answer:
select returns model objects with selected columns, pluck returns an array of values. -> Option B
Quick Check:
Select = objects, Pluck = array [OK]
Hint: Select returns objects, pluck returns arrays of values [OK]
Common Mistakes:
Thinking pluck returns objects
Confusing select with all columns
Assuming select modifies data
2. Which of the following is the correct syntax to get an array of user emails using pluck?
easy
A. User.pluck(:email)
B. User.select(:email).pluck
C. User.pluck.email
D. User.select.pluck(:email)
Solution
Step 1: Identify correct method usage
pluck is called on the model with the column symbol as argument, like User.pluck(:email).
Step 2: Check other options for syntax errors
Options A, B, and C misuse method chaining or syntax and will cause errors.
Final Answer:
User.pluck(:email) -> Option A
Quick Check:
Correct pluck syntax = User.pluck(:column) [OK]
Hint: Use Model.pluck(:column) to get array of values [OK]
Common Mistakes:
Calling pluck without parentheses
Trying to chain pluck after select incorrectly
Using dot notation like pluck.email
3. Given the following code, what will be the output?
pluck(:id, :name) returns an array of arrays like [[1, "Alice"], [2, "Bob"]], not User objects.
Step 2: Check usage of active?
Since elements are arrays, calling active? method on them causes a NoMethodError.
Final Answer:
Calling active? on array elements causes error -> Option D
Quick Check:
Pluck returns arrays, not objects [OK]
Hint: Pluck returns arrays, not objects with methods [OK]
Common Mistakes:
Assuming pluck returns objects
Trying to call model methods on pluck results
Thinking select after pluck filters objects
5. You want to get a list of unique active user emails efficiently. Which code snippet is best?
hard
A. User.where(active: true).pluck(:email).uniq
B. User.where(active: true).select(:email).map(&:email).uniq
C. User.select(:email).where(active: true).pluck(:email).uniq
D. User.pluck(:email).where(active: true).uniq
Solution
Step 1: Analyze efficiency of each option
User.where(active: true).select(:email).map(&:email).uniq loads objects with select then maps emails, which loads more data than needed.
Step 2: Check correct chaining and method usage
User.where(active: true).pluck(:email).uniq uses where to filter active users, then pluck to get emails directly from DB, then uniq to remove duplicates efficiently.
Step 3: Identify errors in other options
User.select(:email).where(active: true).pluck(:email).uniq is redundant but works; User.pluck(:email).where(active: true).uniq is invalid because pluck returns array, so where after pluck causes error.
Final Answer:
User.where(active: true).pluck(:email).uniq -> Option A
Quick Check:
Filter then pluck for efficiency [OK]
Hint: Filter with where, then pluck columns, then uniq [OK]
Common Mistakes:
Calling where after pluck (invalid)
Loading objects unnecessarily before pluck
Not removing duplicates efficiently
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.