Cómo soltar columnas usando Rails migración


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

Author: Andrei Eliade, 2010-05-14

16 answers

remove_column :table_name, :column_name

Por ejemplo:

remove_column :users, :hobby

Eliminaría la columna hobby de la tabla users.

 765
Author: Nick Hammond,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-09 15:03:13

Para versiones anteriores de Rails

ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype

Para los carriles 3 y superiores

rails generate migration RemoveFieldNameFromTableName field_name:datatype
 339
Author: prabu,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-11 01:54:51

Rails 4 se ha actualizado, por lo que el método change se puede usar en la migración para soltar una columna y la migración se revertirá correctamente. Por favor, lea la siguiente advertencia para las aplicaciones Rails 3:

Carriles 3 Advertencia

Tenga en cuenta que cuando utiliza este comando:

rails generate migration RemoveFieldNameFromTableName field_name:datatype

La migración generada se verá algo como esto:

  def up
    remove_column :table_name, :field_name
  end

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

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

  def change
    remove_column :table_name, :field_name
  end

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

 106
Author: Powers,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-03-10 20:17:07

En una aplicación rails4 es posible usar el método change también para eliminar columnas. El tercer param es el data_type y en el forth opcional puedes dar opciones. Está un poco oculto 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
 32
Author: Lars Schirrmeister,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-07-09 21:30:09

Hay dos buenas maneras de hacer esto:

Remove_column

Simplemente puede usar remove_column, así:

remove_column :users, :first_name

Esto está bien si solo necesita hacer un solo cambio en su esquema.

Bloque Change_table

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

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

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

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

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

 21
Author: superluminary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-28 08:35:42

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 ejecutar:

rake db:migrate
 11
Author: aschmid,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-08-24 09:11:40
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 la migración está haciendo realmente.

 10
Author: eden,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-11-13 11:01:03

Eliminar Columnas Para RAILS 5 App

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

El comando anterior genera un archivo de migración dentro del directorio db/migrate. Snippet blow es uno de remove column from table ejemplo generado por Rails generator,

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 Rails que se puede encontrar en aquí.

 9
Author: Xinyang Li,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-17 08:36:59
remove_column :table_name, :column_name

(De los médicos.)

 7
Author: Jordan Running,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-01 01:59:07

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
 7
Author: Koresol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-04-02 09:06:50

Dar el siguiente comando se añadirá en el archivo de migración por su cuenta

rails g migration RemoveColumnFromModel

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

Luego migrar la db

rake db:migrate
 5
Author: prash,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-12 03:06:53

Para eliminar la columna de la tabla en solo 3 pasos sencillos de la siguiente manera:

  1. escriba este comando

rails g migration remove_column_from_table_name

Después de ejecutar este comando en la terminal, un archivo creado por este nombre y marca de tiempo (remove_column from_table_name).

Luego vaya a este archivo.

  1. Dentro del archivo tienes que escribir

    remove_column :table_name, :column_name

  2. Finalmente ir a la consola y luego hacer

    rake db:migrate

 5
Author: Karan Bamniya,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-06 10:48:09

remove_column en el método change 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

 4
Author: Dharmesh Rupani,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-04-18 00:37:29

Generar una migración para eliminar una columna de tal manera que si se migra (rake db:migrate), debe eliminar la columna. Y debería agregar columna atrás si esta migración es rollbacked (rake db:rollback).

La sintaxis:

Remove_column: table_name,: column_name

Elimina la columna pero no puede agregar la columna de nuevo en la reversión.

Ejemplo:

remove_column :users, :last_name

Tenga en cuenta el nombre de la tabla pluralizar: users

El sintaxis:

Remove_column: table_name,: column_name,: type

Elimina la columna, también agrega la columna hacia atrás si la migración es rollbacked.

Ejemplo:

remove_column :users, :last_name, :string

Feliz codificación!

 4
Author: Imran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-13 05:42:22

A Través de
remove_column :table_name, :column_name
en un archivo de migración

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

 0
Author: Manh Cuong,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-06 18:08:07

Haz así;

rails g migration RemoveColumnNameFromTables column_name:type

Es decir, rails g migration RemoveTitleFromPosts title:string

De todos modos, sería mejor considerar también el tiempo de inactividad, ya que el 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 se reinicie su aplicación.

Ref: Migración fuerte

 -1
Author: Nuttapon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-09-11 07:41:15