run remove rails migrations data column ruby-on-rails rails-migrations

ruby-on-rails - remove - rollback migration rails



Migraciones de Rails: Deshacer la configuraciĆ³n predeterminada para una columna (4)

Rieles 5+

def change change_column_default( :table_name, :column_name, from: nil, to: false ) end

Rieles 3 y Rieles 4

def up change_column_default( :table_name, :column_name, nil ) end def down change_column_default( :table_name, :column_name, false ) end

Tengo el problema, que tengo una migración en Rails que establece una configuración predeterminada para una columna, como este ejemplo:

def self.up add_column :column_name, :bought_at, :datetime, :default => Time.now end

Supongamos que me gusta eliminar esa configuración predeterminada en una migración posterior, ¿cómo hago eso con el uso de migraciones ferroviarias?

Mi solución actual es la ejecución de un comando SQL personalizado en la migración de rieles, como este:

def self.up execute ''alter table column_name alter bought_at drop default'' end

Pero no me gusta este enfoque, porque ahora dependo de cómo la base de datos subyacente interpreta este comando. En caso de un cambio de la base de datos, esta consulta quizás ya no funcione y la migración se interrumpiría. Entonces, ¿hay una manera de expresar el deshacer de una configuración predeterminada para una columna en rieles?


El siguiente fragmento de código que utilizo para que las columnas NOT NULL , pero se omite DEFAULT en el nivel de esquema:

def self.up change_column :table, :column, :string, :null => false, :default => "" change_column_default(:table, :column, nil) end


Rieles 4

change_column :courses, :name, :string, limit: 100, null: false


Sounds que estás haciendo lo correcto con tu ''ejecutar'', como señalan los documentos:

change_column_default(table_name, column_name, default)

Establece un nuevo valor predeterminado para una columna. Si desea establecer el valor predeterminado en NULL, no tiene suerte. Es necesario que DatabaseStatements # ejecute la instrucción SQL apropiada. Ejemplos

change_column_default(:suppliers, :qualification, ''new'') change_column_default(:accounts, :authorized, 1)