ruby on rails - remove - Cómo quitar columnas usando la migración de Rails
remove migration rails (16)
Dé el comando siguiente que agregará en el archivo de migración por sí mismo
rails g migration RemoveColumnFromModel
Después de ejecutar el comando anterior, puede comprobar que el archivo de migración remove_column debe agregarse allí solo.
Luego migra el db
rake db:migrate
¿Cuál es la sintaxis para eliminar una columna de la tabla de base de datos a través de una migración de Rails?
En los carriles 5 puedes usar este comando en el 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 ejecute:
rake db:migrate
En una aplicación rails4 es posible usar el método de cambio también para eliminar columnas. El tercer parámetro es el tipo de datos 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
Genere una migración para eliminar una columna de modo que, si se migra ( rake db:migrate
), debería eliminar la columna . Y debería agregar una columna de vuelta si esta migración se revierte ( rake db:rollback
).
La sintaxis:
remove_column: table_name,: column_name
Elimina la columna, pero no puede volver a agregar la columna al deshacer.
Ejemplo:
remove_column :users, :last_name
Anote el nombre de la tabla pluralizar: usuarios
La sintaxis:
remove_column: table_name,: column_name,: type
Elimina la columna, también agrega la columna de nuevo si se restaura la migración.
Ejemplo:
remove_column :users, :last_name, :string
¡Feliz codificación!
Hay dos buenas maneras de hacer esto:
remove_column
Simplemente puedes 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 porque lo encuentro más legible, y puedes hacer varios cambios a la vez.
Aquí está la lista completa de métodos change_table soportados:
http://apidock.com/rails/ActiveRecord/ConnectionAdapters/SchemaStatements/change_table
Hazlo así;
rails g migration RemoveColumnNameFromTables column_name:type
Es decir, los 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 elimina una columna, podría causar excepciones hasta que la aplicación se reinicie.
Ref: migración fuerte
Mediante
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
Para eliminar la columna de la tabla en tan solo 3 pasos como sigue:
- escribe 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).
Entonces ve a este archivo.
dentro del archivo tienes que escribir
remove_column :table_name, :column_name
Finalmente ir a la consola y luego hacer
rake db:migrate
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 ejecuta el comando:
rake db:migrate
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 4 se ha actualizado, por lo que el método de cambio se puede usar en la migración para eliminar una columna y la migración se revertirá con éxito. Lea la siguiente advertencia para las aplicaciones de Rails 3:
Advertencia de rieles 3
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 usar el método de cambio cuando elimine 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.
remove_column
en el método de 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
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 del directorio db/migrate
. El golpe de fragmento es uno de la columna de eliminación de ejemplo de tabla generada 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 here .
rails g migration RemoveXColumnFromY column_name:data_type
X = nombre de columna
Y = nombre de la tabla
EDITAR
Se modificó RemoveXColumnToY
a RemoveXColumnFromY
según los comentarios: proporciona más claridad sobre lo que realmente está haciendo la migración.
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
( De los documentos ) .