yoshyosh
yoshyosh

Reputation: 14086

Rails: How to add add_index to existing table

I already migrated a table called units with several columns. I was wondering how to migrate in a stand alone 'add_index' to this table using the cmd. Is this code correct:

class AddIndexToUnits < ActiveRecord::Migration
  def self.up
    add_index :units, :lesson_id
  end

  def self.down
    remove :units
  end
end

I have a feeling the self.down could be wrong, I am unsure.

Upvotes: 15

Views: 13488

Answers (3)

Laas
Laas

Reputation: 6068

To remove an index, you must use remove_index with the same table and column specification as the self.up's add_index has. So:

def self.down
  remove_index :units, :lesson_id
end

A multi-column index example would be:

def self.down
  remove_index :units, [:lesson_id, :user_id]
end

Upvotes: 2

Yule
Yule

Reputation: 9764

Almost

class AddIndexToUnits < ActiveRecord::Migration
  def self.up
    add_index :units, :lesson_id, :name=>'lesson_index'
  end

  def self.down
    remove_index :units, 'lesson_index'
  end
end

Upvotes: 10

Kris
Kris

Reputation: 2128

The self.up method is correct. Use this for your self.down:

remove_index :units, :column => :lesson_id

Upvotes: 14

Related Questions