2010-10-16 42 views
47

Necesito eliminar algunas columnas de mi modelo de rieles que ya he creado y tengo algunas entradas de fila en ese modelo. ¿Cómo hacerlo? ¿Algún enlace que tenga detalles para modificar el esquema en rieles? estoy raíles usando la versión 3.¿Cómo eliminar una columna de mi modelo Rails?

Respuesta

52

Para eliminar una columna de la base de datos, tiene que generar una migración:

script/rails g migration RemoveColumns 

Luego, en el método de la clase self.up, eliminar sus columnas:

def self.up 
    remove_column :table_name, :column_name 
end 

Es posible que desee volver a añadirlas en el método de la clase self.down así:

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

El Rails Guide para esto entra en mucho más detalle.

+3

Usted no tiene que especificar 'script/rails' con Rails 3.' carriles bastaría g migración RemoveColumns'. – vonconrad

41

Si conoce las columnas que desea eliminar, puede utilizar la convención: Eliminar .. De .. al nombrar sus migraciones. Además, puede incluir los nombres de las columnas cuando ejecuta el comando de migración.

La forma del comando:

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

Por ejemplo:

rails g migration RemoveProjectIDFromProjects project_id:string 

genera el siguiente archivo de migración:

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

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

¿Cambió esto en Rails 4? Cuando traté de usar su ejemplo, solo generó un método de cambio (sin métodos de subir/bajar). – Dan

+0

@Dan - tal vez. No lo he probado en 4. 3 fue la última vez que probé esto. Voy a echar un vistazo más tarde esta noche e informaré. – slm

+2

Después de investigar un poco más, parece que solo se supone que hay un método de cambio en Rails 4. remove_column ahora toma un tipo de datos que debe ser cómo maneja la adición de la columna. – Dan

3

Vía alternativa comando como Add, sólo cambian Add a Remove:

sola columna:

rails g migration RemoveColumnFromTable column:type 

varias columnas:

rails g migration RemoveColumn1AndColumn2FromTable column1:type colummn2:type 
Cuestiones relacionadas