ActiveRecord migrations in Ruby on Rails allow developers to define changes to the database schema using Ruby code. These migrations are versioned, making it easy to apply, roll back, or modify database changes while keeping the schema consistent across development and production environments.
In depth
ActiveRecord migrations are a powerful feature of Ruby on Rails that enable developers to manage database schema changes in a structured way. Each migration is a Ruby class that includes methods like 'up' and 'down' for applying and reverting changes respectively. When you create a migration using the Rails generator, it generates a timestamped file in the 'db/migrate' directory. Running the migration applies the changes to the database, and Rails keeps track of the migration history in a special 'schema_migrations' table. This ensures that migrations are only applied once, preventing duplicate changes and facilitating easy rollbacks if needed.
One of the significant advantages of using ActiveRecord migrations is that they are database-agnostic to an extent, allowing developers to switch between different database systems with minimal changes to the migration files. However, developers must also consider potential edge cases, such as conflicts when multiple developers work on the same migration or ensure that migrations are appropriately versioned in a collaborative environment.
Example scenario
In a recent project, we needed to add a new column to an existing 'users' table to store additional information about user preferences. I generated a new migration to add the 'preferences' column and then used the 'rails db:migrate' command to apply the change. This allowed our whole team to update their local databases consistently. Later, when we realized we needed to change the column type from string to JSON, we created a new migration to alter the existing column, showcasing how easy it is to adjust schema changes on the fly while maintaining a proper version history.
Common mistakes
A common mistake developers make with migrations is forgetting to run them after creating or modifying them, resulting in discrepancies between the local and production databases. This may lead to runtime errors that can be hard to debug. Another frequent error is altering existing columns incorrectly, which can lead to data loss or inconsistencies if not well-planned or backed up, particularly when changing data types or renaming columns without proper handling of the existing data.
Follow-up questions
- What commands do you use to rollback a migration?
- How do you handle migrations in a collaborative environment?
- Can you explain the difference between 'change' and 'up'/'down' methods in migrations?
- What best practices do you follow when creating migrations?

Want all 2,000 questions in one PDF?
- Short answers, in-depth explanations, common mistakes and follow-ups
- 89 topics, from Beginner to Architect, with a clickable contents list
- 226 extra questions that are not on this website
- Free Bonus Pack: 30-day study plan, behavioral questions, salary scripts
Includes 226 extra questions that are not on this site, plus a free Bonus Pack.
Get both books for $9.99 (save $2.99):
The material stays free to read online. This is the organised, offline, print-ready PDF edition. Secure payment by PayPal; your personal download link is emailed after payment is confirmed. Digital product, no shipping.