Cómo soltar columnas usando la migración de Rails

¿Cuál es la sintaxis para eliminar una columna de la tabla de la base de datos a través de una migración de Rails?

preguntado el 13 de mayo de 10 a las 21:05

20 Respuestas

remove_column :table_name, :column_name

Por ejemplo:

remove_column :users, :hobby

eliminaría la columna de afición de la tabla de usuarios.

respondido 09 mar '17, 15:03

Y asegúrate de hacer esto por dentro up y down métodos, no change, como se explica en la respuesta de @Powers. - XåpplI'-I0llwlg'I -

@ XåpplI'-I0llwlg'I-Gracias por el comentario. El método de cambio se puede usar para eliminar una columna en las aplicaciones de Rails 4, pero no se debe usar en Rails 3. Actualicé mi respuesta en consecuencia. - Potestades

También puedes usar remove_column :table_name, :column_name, :type, :options en la pestaña change método, ya que si especifica el tipo revertir la migración es posible. De la documentación: El typey options los parámetros se ignorarán si están presentes. Puede resultar útil proporcionarlos en una migración change método para que pueda revertirse. En ese caso, type y options será utilizado por add_column. - Nicolas

En Rails4, puede eliminar una columna en el change método, pero solo si especifica el tipo de columna. P.ej remove_column, :table_name, :column_name, :column_type. De lo contrario, obtendrá el siguiente error al intentar ejecutar la migración: remove_column is only reversible if given a type - Dennis

Vale la pena señalar en la respuesta principal que eliminar una columna no elimina el índice correspondiente si existe - imitadores

Para versiones anteriores de Rails

ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

Para Rails 3 y superiores

rails generate migration RemoveFieldNameFromTableName field_name:datatype

respondido 11 nov., 17:01

"rails g" se puede utilizar como alternativa a "rails generate" - Nuez

rails g migration remove_field_name_from_table_name field_name:datatype también funciona - estuardo nelson

Tenga en cuenta también que AddXXXtoTTT an RemoveXXXFromTTT puede ir seguida de una lista espaciada en blanco de nombre_de_archivo: tipo_de_datos, y se crearán las instrucciones add_column y remove_column apropiadas: rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer elimina dos atributos mediante una única migración. Tenga en cuenta también que remove_column no es compatible con change método, así que tienes que escribir ambos up y down. - claudio floreani

Rails 4 parece soportar change para esto. La reversión funciona como debería. - Chico_desconocido

@AdamGrant Creo que si estás usando un change método que puede ser revirtió * Deberá informar el tipo de datos (y todos los demás modificadores de campo), por lo que si revierte esa migración, el campo se puede volver a crear correctamente. * Cuando digo revertido, eso es en términos de estructura de la base de datos, por supuesto, los datos de esa columna obviamente se perderán. - RFVoltolini

Rails 4 se ha actualizado, por lo que el método de cambio se puede utilizar en la migración para eliminar una columna y la migración se revertirá correctamente. Lea la siguiente advertencia para las aplicaciones de Rails 3:

Rieles 3 Advertencia

Tenga en cuenta que cuando utilice este comando:

rails generate migration RemoveFieldNameFromTableName field_name:datatype

La migración generada se verá así:

  def up
    remove_column :table_name, :field_name
  end

  def down
    add_column :table_name, :field_name, :datatype
  end

Asegúrese de no utilizar el método de cambio al eliminar columnas de una tabla de base de datos (ejemplo de lo que no desea en el archivo de migración en las aplicaciones de Rails 3):

  def change
    remove_column :table_name, :field_name
  end

El método de cambio en Rails 3 no es inteligente cuando se trata de remove_column, por lo que no podrá revertir esta migración.

respondido 10 mar '14, 20:03

luego ejecute rake db: migrate - roxdurazo

@Powers - respuesta brillante y clara - ¿podría desarrollar lo siguiente? "El método de cambio en Rails 3 no es inteligente cuando se trata de remove_column, por lo que no podrá revertir esta migración". - BKSpurgeon

@BKSpurgeon - En Rails 3, si usa el change método, entonces el rake db:rollback El comando saldrá por error. rake db:rollback es básicamente lo contrario de rake db:migrate. Este error se corrigió en Rails 4 :) - Potestades

En Rails 4, intenté revertir una columna de caída de cambios. Falla y establece que debe especificar data_type (como en su código de bajada en su respuesta) - rmcsharry

Me ocurrió el mismo problema que con @rmcsharry. Mi versión de rieles es 4.2.2 y utilicé el método de cambio. cuando intenté revertir, se produjo un error de que remove_column solo es reversible si se le da un tipo. - M.Habib

En una aplicación rails4, es posible utilizar el método de cambio también para eliminar columnas. El tercer parámetro es el tipo de datos y en el cuarto opcional puede dar opciones. Está un poco escondido en la sección 'Transformaciones disponibles' en la documentación .

class RemoveFieldFromTableName < ActiveRecord::Migration
  def change
    remove_column :table_name, :field_name, :data_type, {}
  end
end

Respondido 09 Jul 14, 22:07

Hay dos buenas formas de hacer esto:

eliminar_columna

Simplemente puede usar remove_column, así:

remove_column :users, :first_name

Esto está bien si solo necesita realizar un único cambio en su esquema.

bloque change_table

También puede hacer esto usando un bloque change_table, así:

change_table :users do |t|
  t.remove :first_name
end

Prefiero esto porque lo encuentro más legible y puedes hacer varios cambios a la vez.

Aquí está la lista completa de métodos change_table admitidos:

http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table

Respondido 28 Abr '14, 09:04

Instrucciones claras y sencillas para los rieles 5 y 6

  • ADVERTENCIA: perderá datos si elimina una columna de su base de datos. Para continuar, vea a continuación:
  • Advertencia: las siguientes instrucciones son para migraciones triviales. Para migraciones complejas con, por ejemplo, millones y millones de filas, tendrá que tener en cuenta la posibilidad de fallas, también tendrá que pensar en cómo optimizar sus migraciones para que se ejecuten rápidamente y la posibilidad de que los usuarios usen su aplicación mientras se está produciendo el proceso de migración. Si tiene varias bases de datos, o si algo es remotamente complicado, ¡no me culpe si algo sale mal!

1. Crea una migración

Corral el siguiente comando en su terminal:

rails generate migration remove_fieldname_from_tablename fieldname:fieldtype

Nota: el nombre de la tabla debe estar en plural según la convención de rieles.

Ejemplo:

En mi caso quiero quitar el accepted columna (un valor booleano) de la quotes mesa:

rails g migration RemoveAcceptedFromQuotes accepted:boolean

Ver la documentación re: una convención al agregar / eliminar campos a una tabla:

Hay un atajo sintáctico especial para generar migraciones que agregan campos a una tabla.

rieles generan migración add_fieldname_to_tablename fieldname: fieldtype

2. Verifica la migración

# db/migrate/20190122035000_remove_accepted_from_quotes.rb
class RemoveAcceptedFromQuotes < ActiveRecord::Migration[5.2]
  # with rails 5.2 you don't need to add a separate "up" and "down" method.
  def change
    remove_column :quotes, :accepted, :boolean
  end
end

3. Ejecute la migración

rake db:migrate or rails db:migrate (ambos son iguales)

.... ¡Y luego te vas a las carreras!

Respondido 15 Jul 20, 06:07

ahora las migraciones también se pueden ejecutar como rails db:migrate - Imran Ali

Genere una migración para eliminar una columna de modo que si se migra (rake db:migrate), debería suelta la columna. Y debería agregar columna de nuevo si esta migración se revierte (rake db:rollback).

La sintaxis:

remove_column: table_name,: column_name,: type

Elimina la columna, también agrega columna de nuevo si se revierte la migración.

Ejemplo:

remove_column :users, :last_name, :string

Nota:: Si omite el tipo de datos, la migración eliminará la columna correctamente, pero si revierte la migración, arrojará un error.

Respondido 04 Jul 19, 05:07

en rails 5 puedes usar este comando en la terminal:

rails generate migration remove_COLUMNNAME_from_TABLENAME COLUMNNAME:DATATYPE

por ejemplo, para eliminar la columna access_level (cadena) de los usuarios de la tabla:

rails generate migration remove_access_level_from_users access_level:string

y luego ejecuta:

rake db:migrate

Respondido 24 ago 16, 10:08

Eliminar columnas para la aplicación RAILS 5

rails g migration Remove<Anything>From<TableName> [columnName:type]

El comando anterior genera un archivo de migración dentro db/migrate directorio. Snippet Blow es uno de los ejemplos de eliminar columna de la tabla generados por el generador de Rails,

class RemoveAgeFromUsers < ActiveRecord::Migration
  def up
    remove_column :users, :age
  end
  def down
    add_column :users, :age, :integer
  end
end

También hice una guía de referencia rápida para rieles que se puede encontrar en aquí.

Respondido 17 Feb 17, 08:02

Puedes probar lo siguiente:

remove_column :table_name, :column_name

(Documentación oficial)

Respondido el 07 de diciembre de 18 a las 09:12

rails g migration RemoveXColumnFromY column_name:data_type

X = nombre de la columna
Y = nombre de la tabla

EDITAR

cambiado RemoveXColumnToY a RemoveXColumnFromY según los comentarios: proporciona más claridad sobre lo que realmente está haciendo la migración.

respondido 13 nov., 17:11

"Eliminar columna a mesa "suena extraño, así que en parece ser la mejor opción aquí. - Sebastián vom Meer

@SebastianvomMeer sí, estoy de acuerdo - el inglés se lee mucho mejor con 'from' - BKSpurgeon

Para eliminar la columna de la tabla, debe ejecutar la siguiente migración:

rails g migration remove_column_name_from_table_name column_name:data_type

Luego ejecute el comando:

rake db:migrate

Respondido 02 Abr '18, 10:04

Dé el siguiente comando que agregará en el archivo de migración por sí solo

rails g migration RemoveColumnFromModel

Después de ejecutar el comando anterior, puede verificar el archivo de migración, el código remove_column debe agregarse allí por sí solo

Luego migre la base de datos

rake db:migrate

Respondido 12 Feb 14, 03:02

remove_column in change El método le ayudará a eliminar la columna de la tabla.

class RemoveColumn < ActiveRecord::Migration
  def change
    remove_column :table_name, :column_name, :data_type
  end
end

Vaya a este enlace para obtener una referencia completa: http://guides.rubyonrails.org/active_record_migrations.html

Respondido 18 Abr '16, 01:04

Para quitar la columna de la tabla en tan solo 3 sencillos pasos como sigue:

  1. escribe este comando

rails g migration remove_column_from_table_name

después de ejecutar este comando en la terminal, un archivo creado con este nombre y sello de tiempo (remove_column from_table_name).

Luego ve a este archivo.

  1. dentro del archivo tienes que escribir

    remove_column :table_name, :column_name

  2. Finalmente ve a la consola y luego haz

    rake db:migrate

Respondido 06 Abr '17, 11:04

Aquí hay uno más de la consola de rieles.

ActiveRecord::Migration.remove_column(:table_name, :column_name)

Respondido 26 ago 19, 09:08

A través de esta formación, el personal docente y administrativo de escuelas y universidades estará preparado para manejar los recursos disponibles que derivan de la diversidad cultural de sus estudiantes. Además, un mejor y mayor entendimiento sobre estas diferencias y similitudes culturales permitirá alcanzar los objetivos de inclusión previstos.
remove_column :table_name, :column_name
en un archivo de migración

Puede eliminar una columna directamente en una consola de rieles escribiendo:
ActiveRecord::Base.remove_column :table_name, :column_name

respondido 06 mar '17, 18:03

Hazlo así;

rails g migration RemoveColumnNameFromTables column_name:type

Es decir rails g migration RemoveTitleFromPosts title:string

De todos modos, sería mejor considerar el tiempo de inactividad también, ya que ActiveRecord almacena en caché las columnas de la base de datos en tiempo de ejecución, por lo que si suelta una columna, podría causar excepciones hasta que su aplicación se reinicie.

Ref: Fuerte migración

Respondido el 11 de Septiembre de 18 a las 08:09

Simplemente, puede eliminar la columna

remove_column :table_name, :column_name

Por ejemplo,

remove_column :posts, :comment

Respondido el 04 de enero de 19 a las 06:01

Primero intente crear un archivo de migración ejecutando el comando:

rails g migration RemoveAgeFromUsers age:string

y luego en el directorio raíz del proyecto ejecute la migración ejecutando el comando:

rails db:migrate

Respondido el 13 de enero de 20 a las 05:01

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.