Respuestas:
remove_column :table_name, :column_name
Por ejemplo:
remove_column :users, :hobby
eliminaría la columna de hobby de la tabla de usuarios.
remove_column :table_name, :column_name, :type, :options
dentro del change
método, ya que si especifica el tipo, es posible revertir la migración. A partir de la documentación: La type
y options
parámetros serán ignorados si está presente. Puede ser útil proporcionarlos en el change
método de una migración para que pueda revertirse. En ese caso, type
y options
será utilizado por add_column.
change
método, pero solo si especifica el tipo de columna. Por ej remove_column, :table_name, :column_name, :column_type
. De lo contrario, recibirá el siguiente error cuando intente ejecutar la migración:remove_column is only reversible if given a type
Para versiones anteriores de Rails
ruby script/generate migration RemoveFieldNameFromTableName field_name:datatype
Para rieles 3 y superiores
rails generate migration RemoveFieldNameFromTableName field_name:datatype
rails g migration remove_field_name_from_table_name field_name:datatype
también funciona
AddXXXtoTTT
una RemoveXXXFromTTT
puede ser seguido por una lista blanca espaciada de filed_name: data_type, y se crearán los estados add_column y remove_column apropiadas: rails g migration RemoveUnusefulFieldsFromUsers hair_color:string favorite_number:integer
elimina dos atributos utilizando una sola migración. Tenga en cuenta también que remove_column
no es compatible con el change
método, por lo que debe escribir ambos up
y down
.
change
esto. Rollback funciona como debería.
change
método que se puede revertir * 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 recrear 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.
Rails 4 se ha actualizado, por lo que el método de cambio se puede usar en la migración para descartar una columna y la migración se revertirá con éxito. Lea la siguiente advertencia para las aplicaciones de Rails 3:
Rieles 3 Advertencia
Tenga en cuenta que cuando utiliza 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 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.
change
método, el rake db:rollback
comando generará un error. rake db:rollback
es básicamente lo contrario de rake db:migrate
. Este error se corrigió en Rails 4 :)
En una aplicación rails4 es posible usar el método de cambio también para eliminar columnas. El tercer parámetro es data_type y en el opcional puede 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
Hay dos buenas formas de hacer esto:
Simplemente puede usar remove_column, así:
remove_column :users, :first_name
Esto está bien si solo necesita hacer un solo cambio en su esquema.
También puede 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 métodos de change_table compatibles:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
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 (string) de los usuarios de la tabla:
rails generate migration remove_access_level_from_users access_level:string
y luego ejecuta:
rake db:migrate
Genere una migración para eliminar una columna de modo que si se migra ( rake db:migrate
), se debe soltar la columna . Y debería agregar una 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 la columna si la migración se revierte.
Ejemplo:
remove_column :users, :last_name, :string
Nota : Si omite el tipo de datos , la migración eliminará la columna con éxito, pero si revierte la migración arrojará un error.
Ejecute el siguiente comando en su terminal:
rails generate migration remove_fieldname_from_tablename fieldname:fieldtype
Nota: el nombre de la tabla debe estar en forma plural según la convención de rails.
Ejemplo:
En mi caso, quiero eliminar la accepted
columna (un valor booleano) de la quotes
tabla:
rails g migration RemoveAcceptedFromQuotes accepted:boolean
Consulte la documentación sobre: una convención al agregar / eliminar campos a una tabla:
Hay un acceso directo sintáctico especial para generar migraciones que agregan campos a una tabla.
los rieles generan migración add_fieldname_to_tablename fieldname: fieldtype
# 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
rake db:migrate
.... Y luego te vas a las carreras!
rails db:migrate
Eliminar la aplicación Columns For RAILS 5
rails g migration Remove<Anything>From<TableName> [columnName:type]
El comando anterior genera un archivo de migración dentro del db/migrate
directorio. Snippet Blow es uno de los ejemplos de eliminación de columnas de la tabla generados por el generador 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 Rails que se puede encontrar aquí .
rails g migration RemoveXColumnFromY column_name:data_type
X = nombre de 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.
remove_column
in change
te 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
Para eliminar la columna de la tabla en 3 sencillos pasos de la siguiente manera:
rails g migration remove_column_from_table_name
después de ejecutar este comando en la terminal un archivo creado con este nombre y marca de tiempo (remove_column from_table_name).
Luego ve a este archivo.
dentro del archivo tienes que escribir
remove_column :table_name, :column_name
Finalmente ve a la consola y luego haz
rake db:migrate
Aquí hay uno más de la consola de rieles
ActiveRecord::Migration.remove_column(:table_name, :column_name)
A través
remove_column :table_name, :column_name
de un archivo de migración
Puede eliminar una columna directamente en una consola de rieles escribiendo:
ActiveRecord::Base.remove_column :table_name, :column_name
Hazlo 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 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 la aplicación se reinicie.
Ref: migración fuerte
Simplemente, puedes eliminar la columna
remove_column :table_name, :column_name
Por ejemplo,
remove_column :posts, :comment
up
y losdown
métodos, nochange
, como se explica en la respuesta de @Powers.