2011-05-24 9 views
14

Ya migré una tabla llamada unidades con varias columnas. Me preguntaba cómo migrar de forma independiente 'add_index' a esta tabla usando el cmd. Es este código correcto:Rails: Cómo agregar add_index a la tabla existente

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

    def self.down 
    remove :units 
    end 
end 

Tengo la sensación de que el autodescenso podría ser incorrecto, no estoy seguro.

Respuesta

14

El método self.up es correcto. Utilizar esto para su self.down:

remove_index :units, :column => :lesson_id 
+0

gracias: D, parece que ustedes tienen respuestas ligeramente diferentes – yoshyosh

+0

La diferencia es que Yule da un nombre al índice en su self.up que usa para eliminarlo. El código que proporcioné elimina el índice en función de su nombre de columna. – Kris

9

Casi

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 
+0

gracias! :) ¿Cómo agrego esto desde la línea de comando ?: Rails generate migration add_index_to_units does not work – yoshyosh

+0

¿Qué exactamente no funciona? ¿No se creó un nuevo archivo de migración? – Arsen7

+0

se crea un archivo pero parece realmente extraño ... como tiene 2 add_columns en la definición self.up – yoshyosh

2

Para eliminar un índice, debe utilizar remove_index con la misma especificación de la tabla y la columna que tiene el self.up add_index. Por lo tanto:

def self.down 
    remove_index :units, :lesson_id 
end 

Un varias columnas ejemplo índice sería:

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