Seed data helps you fill your app's database with example information quickly. It makes testing and development easier by starting with known data.
Seed data in Ruby on Rails
# db/seeds.rb Model.create(attribute: 'value', other_attribute: 123) # Then run: bin/rails db:seed
The db/seeds.rb file is where you write code to add data.
Run bin/rails db:seed to load the data into your database.
User.create(name: 'Alice', email: 'alice@example.com')
Product.create([{name: 'Book', price: 10}, {name: 'Pen', price: 2}])10.times { |i| Post.create(title: "Post #{i + 1}", body: 'Sample text') }
This seed file adds one user and two products to the database. Running bin/rails db:seed will insert these records so you can use them in your app.
# db/seeds.rb User.create(name: 'John Doe', email: 'john@example.com') Product.create([{name: 'Notebook', price: 5}, {name: 'Pencil', price: 1}]) # Run this command in terminal: bin/rails db:seed
Running db:seed does not clear existing data; use db:reset to drop and recreate the database with seeds.
You can add any Ruby code in seeds.rb, like loops or conditionals, to create complex data.
Seed data fills your database with example info for easy testing and development.
Write seed code in db/seeds.rb and run bin/rails db:seed to load it.
Use loops and arrays to add many records quickly.
Practice
Solution
Step 1: Understand what seed data is
Seed data is used to add example or default data into the database to help developers test and develop features easily.Step 2: Identify the correct purpose
Among the options, only filling the database with initial example data matches the purpose of seed data.Final Answer:
To fill the database with initial example data for testing and development -> Option DQuick Check:
Seed data purpose = Fill database with example data [OK]
- Confusing seed data with database schema creation
- Thinking seed data runs the server
- Assuming seed data generates UI templates
Solution
Step 1: Recall the command to run seed data
The standard command to load seed data in Rails isbin/rails db:seed.Step 2: Check other options
rails generate seedis not a valid command,bin/rails db:createcreates the database, andrails serverstarts the server.Final Answer:
bin/rails db:seed -> Option BQuick Check:
Run seed file = bin/rails db:seed [OK]
- Using rails generate seed instead of db:seed
- Confusing db:create with db:seed
- Trying to run seeds with rails server
db/seeds.rb:
3.times do |i|
User.create(name: "User #{i + 1}")
end
What will be the names of the users created after running bin/rails db:seed?Solution
Step 1: Understand the loop and index
The loop runs 3 times withivalues 0, 1, 2.Step 2: Calculate user names
Each user name is "User " plusi + 1, so names are "User 1", "User 2", "User 3".Final Answer:
["User 1", "User 2", "User 3"] -> Option CQuick Check:
Loop 3 times with i+1 = User 1, 2, 3 [OK]
- Using i without adding 1, causing off-by-one names
- Assuming loop runs 2 times instead of 3
- Mixing order of names
User.create(name: "Alice") User.create(name: "Bob") User.create(name: )
Solution
Step 1: Check syntax of each User.create call
The first two calls have valid name values. The last call hasname:with no value, which is a syntax error.Step 2: Verify other options
Calling User.create multiple times is allowed. Names do not have to be unique unless validated. Loop is optional.Final Answer:
Missing value for name in the last User.create call -> Option AQuick Check:
Empty value after name: causes syntax error [OK]
- Thinking multiple create calls are invalid
- Assuming uniqueness is required by default
- Believing loops are mandatory for seeds
Solution
Step 1: Understand the requirement to avoid duplicates
We want to add categories only if they don't exist yet, so we must check before creating.Step 2: Analyze each option
['Books', 'Movies', 'Music'].each do |name| Category.create(name: name) end always creates new records, causing duplicates. ['Books', 'Movies', 'Music'].each do |name| Category.find_or_create_by(name: name) end usesfind_or_create_bywhich checks existence before creating. Category.delete_all ['Books', 'Movies', 'Music'].each do |name| Category.create(name: name) end deletes all categories first, which is destructive. Category.create(['Books', 'Movies', 'Music']) tries to create with an array directly, which is invalid syntax.Final Answer:
['Books', 'Movies', 'Music'].each do |name| Category.find_or_create_by(name: name) end -> Option AQuick Check:
Use find_or_create_by to avoid duplicates [OK]
- Creating records without checking duplicates
- Deleting all data before seeding unnecessarily
- Passing array directly to create without hashes
Ready to prove it?
Pass the test and this pattern moves unknown
