What is the purpose of the db/migrate folder in a Rails project?
The db/migrate folder stores migration files that describe changes to the database schema, like creating or modifying tables. These files help Rails track and apply database changes in order.
Click to reveal answer
beginner
What command do you run to create a new migration in Rails?
You run rails generate migration MigrationName to create a new migration file with a timestamp in the db/migrate folder.
Click to reveal answer
intermediate
How do migrations help keep the database schema consistent across different environments?
Migrations record each change as a file with a timestamp. Running rails db:migrate applies all pending migrations in order, ensuring all environments have the same database structure.
Click to reveal answer
intermediate
What is the role of the schema.rb file in Rails?
The schema.rb file is a snapshot of the current database structure. It is updated after migrations run and helps Rails recreate the database schema quickly without running all migrations.
Click to reveal answer
intermediate
What happens if you try to run rails db:migrate but some migrations have already been applied?
Rails checks which migrations have been applied by looking at the schema_migrations table. It only runs new migrations that haven't been applied yet, so it avoids repeating changes.
Click to reveal answer
Where are Rails migration files stored?
Alib/tasks
Bapp/models
Cdb/migrate
Dconfig
✗ Incorrect
Migration files live in the db/migrate folder to organize database schema changes.
What command creates a new migration file?
Arails new migration
Brails generate migration MigrationName
Crails db:create migration
Drails generate model MigrationName
✗ Incorrect
Use rails generate migration followed by the name to create a migration file.
What does rails db:migrate do?
ARuns all pending migrations to update the database schema
BDeletes the database
CCreates a new Rails project
DGenerates a new model
✗ Incorrect
It applies all migrations that have not yet been run to update the database.
What file shows the current database schema snapshot?
Aseeds.rb
Broutes.rb
Cdatabase.yml
Dschema.rb
✗ Incorrect
schema.rb reflects the current structure of the database after migrations.
How does Rails know which migrations have already run?
ABy checking the schema_migrations table in the database
BBy reading the migration filenames
CBy checking the config folder
DBy scanning the app/models folder
✗ Incorrect
Rails tracks applied migrations in the schema_migrations table to avoid rerunning them.
Explain the purpose of the db/migrate folder and how migrations work in Rails.
Think about how Rails tracks and applies database changes step-by-step.
You got /4 concepts.
Describe the role of the schema.rb file and how it relates to migrations.
Consider how Rails can rebuild the database structure without running all migrations again.
You got /3 concepts.
Practice
(1/5)
1. What is the main purpose of the db/migrate folder in a Rails project?
easy
A. To store migration files that change the database structure step-by-step
B. To hold all the Ruby model files for the application
C. To keep the application configuration files
D. To store static assets like images and stylesheets
Solution
Step 1: Understand the role of the db/migrate folder
This folder contains migration files that describe changes to the database schema over time.
Step 2: Differentiate from other folders
Model files are in app/models, configs in config, and assets in app/assets.
Final Answer:
To store migration files that change the database structure step-by-step -> Option A
Quick Check:
Migration files = db/migrate folder [OK]
Hint: Migrations live in db/migrate to track database changes [OK]
Common Mistakes:
Confusing migrations with model files
Thinking assets or configs are in db/migrate
Assuming db/migrate holds seed data
2. Which command correctly generates a new migration file in Rails?
easy
A. rails new migration AddAgeToUsers age:integer
B. rails generate migration AddAgeToUsers age:integer
C. rails create migration AddAgeToUsers age:integer
D. rails make migration AddAgeToUsers age:integer
Solution
Step 1: Recall the Rails command for generating migrations
The correct command is rails generate migration followed by the migration name and fields.
Step 2: Check the options for correct syntax
Only rails generate migration AddAgeToUsers age:integer uses the exact Rails command syntax for migration generation.
Final Answer:
rails generate migration AddAgeToUsers age:integer -> Option B
Quick Check:
Use rails generate migration to create migrations [OK]
Hint: Use 'rails generate migration' to create migration files [OK]
Common Mistakes:
Using 'rails create' instead of 'rails generate'
Confusing 'rails new' with migration commands
Using 'rails make' which is invalid
3. Given this migration file content:
class CreateBooks < ActiveRecord::Migration[7.0]
def change
create_table :books do |t|
t.string :title
t.integer :pages
t.timestamps
end
end
end
What will happen when you run rails db:migrate?
medium
A. Nothing happens because migrations only update existing tables
B. An error occurs because the migration syntax is wrong
C. The existing 'books' table will be deleted
D. A new table named 'books' with columns 'title', 'pages', and timestamps will be created
Solution
Step 1: Analyze the migration code
The migration defines creating a new table called 'books' with columns 'title' (string), 'pages' (integer), and timestamps.
Step 2: Understand what rails db:migrate does
It runs pending migrations, applying the changes to the database schema, here creating the 'books' table.
Final Answer:
A new table named 'books' with columns 'title', 'pages', and timestamps will be created -> Option D
Quick Check:
Create table migration runs successfully [OK]
Hint: Create_table migrations add new tables when migrated [OK]
Common Mistakes:
Thinking migration deletes tables
Assuming syntax error without checking code
Believing migrations only update, not create
4. You wrote this migration:
class AddEmailToUsers < ActiveRecord::Migration
def change
add_column :users, :email, :string
end
end
But running rails db:migrate gives an error: undefined method 'add_column'. What is the likely cause?
medium
A. The migration class should inherit from ActiveRecord::Migration[7.0] but it does
B. The migration file is missing the def change method
C. The migration class is missing the version number in inheritance
D. The migration file name does not match the class name
Solution
Step 1: Check the migration inheritance
Rails 7 requires specifying the migration version in the class inheritance, e.g., ActiveRecord::Migration[7.0].
Step 2: Identify the error cause
If the version is missing or incorrect, Rails may not recognize migration methods like add_column, causing the error.
Final Answer:
The migration class is missing the version number in inheritance -> Option C
Quick Check:
Migration version number required for method recognition [OK]
Hint: Always specify migration version in class inheritance [OK]
Common Mistakes:
Ignoring migration version in class inheritance
Assuming method missing means syntax error
Not matching file name and class name
5. You want to rename a column username to login in the users table using a migration. Which migration code correctly does this?
hard
A. def change
rename_column :users, :username, :login
end
B. def change
change_column :users, :username, :login
end
C. def change
remove_column :users, :username
add_column :users, :login, :string
end
D. def change
rename_table :users, :login
end
Solution
Step 1: Understand the goal
You want to rename a column, not change its type or remove and add a new one.
Step 2: Identify the correct migration method
rename_column changes a column's name safely without losing data.
Step 3: Check options
def change
rename_column :users, :username, :login
end uses rename_column :users, :username, :login, which is correct. def change
change_column :users, :username, :login
end wrongly uses change_column which changes type, not name. def change
remove_column :users, :username
add_column :users, :login, :string
end removes and adds columns, which is risky. def change
rename_table :users, :login
end renames the whole table, not a column.
Final Answer:
def change
rename_column :users, :username, :login
end -> Option A
Quick Check:
Use rename_column to rename columns safely [OK]
Hint: Use rename_column to rename columns without data loss [OK]
Common Mistakes:
Using change_column to rename instead of change type
Removing and adding columns loses data
Confusing rename_table with rename_column
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.