How to remove a column from my Rails model?

To remove a database column, you have to generate a migration:

script/rails g migration RemoveColumns

Then in the self.up class method, remove your columns:

def self.up
  remove_column :table_name, :column_name
end

You may want to add them back in the self.down class method as well:

def self.down
  add_column :table_name, :column_name, :type
end

The Rails Guide for this goes into much more detail.


If you know the columns you want to remove you can use the convention: Remove..From.. when naming your migrations. Additionally you can include the column names when running the migration command.

The form of the command:

rails g migration Remove..From.. col1:type col2:type col3:type

For example:

rails g migration RemoveProjectIDFromProjects project_id:string

generates the following migration file:

class RemoveProjectIdFromProjects < ActiveRecord::Migration
  def self.up
    remove_column :projects, :project_id
  end

  def self.down
    add_column :projects, :project_id, :string
  end
end

Via command alternative as Add, only change Add to Remove:

Single Column:

rails g migration RemoveColumnFromTable column:type

Multiple Columns:

rails g migration RemoveColumn1AndColumn2FromTable column1:type colummn2:type