December 22, 2022 By Matthew Rathbone *
On this page

A Rails migration is a way to make changes to your database schema over time. These changes could include creating new tables, adding or removing columns from existing tables, or modifying the data type of a column. Migrations are an important tool for keeping your database schema in sync with your application’s codebase, as they allow you to make these changes in a controlled and reversible way.

To generate a Rails migration, you will need to have the Rails command-line interface (CLI) installed. If you don’t already have it, you can install it by running the following command:

gem install rails

Once you have the Rails CLI installed, you can generate a migration by running the following command:

rails generate migration NAME [field[:type][:index] field[:type][:index]] [options]

Replace “NAME” with a descriptive name for your migration. This name should be written in snake case and should describe the change that the migration will make to the database. For example, if you are creating a new table called “users”, you might name your migration “create_users”.

Rails uses the NAME to figure out what you are trying to do in your migration, so using create_users tells Rails we are creating a table named users.

You can also specify fields and their data types in the migration command. For example, if you are creating a “name” field of type “string” in the “users” table, you could specify it like this:

rails generate migration create_users name:string

You can also specify whether or not you want to create an index on a field by adding “:index” after the field’s data type. For example, if you want to create an index on the “name” field in the “users” table, you could specify it like this:

rails generate migration create_users name:string:index

There are a number of options that you can use when generating a migration. Some of the most useful options include:

  • --force: Overwrite any existing migration with the same name.
  • --timestamps: Add timestamps (created_at and updated_at) to the migration.
  • --primary-key: Add a primary key field to the migration.

Once you have run the migration command, Rails will generate a new file in the db/migrate directory. This file will contain a class that represents your migration.

To apply the migration to your database, you will need to run the following command

rails db:migrate