En mi aplicación Rails (3.2), tengo un montón de tablas en mi base de datos, pero olvidé agregar algunas restricciones no nulas. Busqué en Google pero no puedo encontrar cómo escribir una migración que agrega no nulo a una columna existente.
TIA
En mi aplicación Rails (3.2), tengo un montón de tablas en mi base de datos, pero olvidé agregar algunas restricciones no nulas. Busqué en Google pero no puedo encontrar cómo escribir una migración que agrega no nulo a una columna existente.
TIA
Respuestas:
Para Rails 4+, la respuesta de nates (usando change_column_null ) es mejor.
Pre-Rails 4, prueba change_column .
IrreversibleMigration
que puede no ser lo que desea.
También puede usar change_column_null :
change_column_null :table_name, :column_name, false
1) PRIMERO: Agregar columna con valor predeterminado
2) ENTONCES: eliminar el valor predeterminado
add_column :orders, :items, :integer, null: false, default: 0
change_column :orders, :items, :integer, default: nil
Si lo está utilizando en un nuevo script / esquema de creación de migración, aquí es cómo podemos definirlo
class CreateUsers < ActiveRecord::Migration[5.2]
def change
create_table :users do |t|
t.string :name, null: false # Notice here, NOT NULL definition
t.string :email, null: false
t.string :password, null: false
t.integer :created_by
t.integer :updated_by
t.datetime :created_at
t.datetime :updated_at, default: -> { 'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP' }
end
end
end
:limit
restricción), debe repetir esos atributos al usarloschange_column
, o se perderán. Por esta razón, prefiero usarchange_column_null