Ruby on Rails Q & A

 

What are Rails migrations and how do they work?

Rails migrations are a powerful feature of the framework that lets developers make changes to the database schema in a structured and version-controlled manner. Think of them as a set of instructions for evolving your database over time. They allow for adding, modifying, or removing tables, columns, and indexes, ensuring that the structure of your database remains consistent with the state of your application.

 

Here’s how they work:

 

  1. Creating Migrations: You can generate a new migration using Rails’ command-line tools. For example, if you want to create a new table called `users`, you might run:

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```bash
rails generate migration CreateUsers
```
```bash rails generate migration CreateUsers ```
   ```bash

   rails generate migration CreateUsers

   ```

 

   This will generate a new file in the `db/migrate/` directory, which will have a name like `20231010123456_create_users.rb` (the numbers at the beginning represent a timestamp).

 

  1. Writing Migrations: Open the generated file. Inside, you’ll see a Ruby class with methods like `change`, `up`, or `down`. These methods define the actions to perform. For instance, to add a table:

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```ruby
def change
create_table :users do |t|
t.string :name
t.string :email
t.timestamps
end
end
```
```ruby def change create_table :users do |t| t.string :name t.string :email t.timestamps end end ```
   ```ruby

   def change

     create_table :users do |t|

       t.string :name

       t.string :email

       t.timestamps

     end

   end

   ```

 

  1. Running Migrations: Once the migration is defined, you apply it using:

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```bash
rails db:migrate
```
```bash rails db:migrate ```
   ```bash

   rails db:migrate

   ```

 

   This command will run all pending migrations, applying the changes to the database. Rails keeps track of which migrations have been run, ensuring each is executed only once.

 

  1. Rolling Back Migrations: If you need to undo a migration, Rails provides the ability to rollback:

 

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
```bash
rails db:rollback
```
```bash rails db:rollback ```
   ```bash

   rails db:rollback

   ```

 

 This will undo the last migration applied. If you’ve made a series of changes and need to rollback multiple steps, you can specify how many with an additional argument, like `rails db:rollback STEP=3`.

 

Migrations in Rails provide a systematic, version-controlled approach to database schema changes. They ensure that developers, regardless of their environment, have a consistent and updated database schema, facilitating collaboration and reducing potential bugs related to database discrepancies.

Previously at
Flag Argentina
Brazil
time icon
GMT-3
Senior Software Engineer with a focus on remote work. Proficient in Ruby on Rails. Expertise spans y6ears in Ruby on Rails development, contributing to B2C financial solutions and data engineering.