ruby on rails 4 - remover - Rails 4: ¿Eliminar la restricción no nula de la columna de la tabla con la migración?
agregar columna a tabla en rails (4)
Dado el siguiente schema.rb
:
create_table "people", force: true do |t|
t.string "name", null: false
t.integer "age"
t.integer "height"
t.string "email"
t.boolean "married", default: false
t.text "bio"
t.integer "fav_number"
t.decimal "lucky_num", precision: 2, scale: 2
t.datetime "birthday"
t.datetime "created_at"
t.datetime "updated_at"
end
Me gustaría eliminar el valor predeterminado del name
null: false
. Intenté ejecutar una migración separada con change_column_default
, pero eso no tuvo impacto en schema.rb
. ¿Alguna sugerencia?
De los docs :
def up
change_column_default :table_name, :status, 0
end
def down
change_column_default :table_name, :status, nil
end
La función ''up'' definitivamente hará el trabajo cuando lo haga db: migrate.
Pero en el futuro, en algunos casos, como la reversión, es posible que desee una función para revertir esta migración en particular.
def up
change_column_null :people, :name, true
end
def down
change_column_null :people, :name, false
end
Parece que no intentas cambiar el valor predeterminado de la columna, sino eliminar la restricción NOT NULL y permitir valores nulos (es decir, cambiar de "nulo: falso" a "nulo: verdadero" predeterminado). Si ese es el caso, entonces puedes usar change_column_null :
class ChangeNameNull < ActiveRecord::Migration
def change
change_column_null :people, :name, true
end
end
Editar 1: - Corregido error tipográfico
def change
change_column_null(:users, :admin, false, <put a default value here> )
# change_column(:users, :admin, :string, :default => "")
end
Cambiar una columna con valores NULL para no permitir NULL causará problemas. Este es exactamente el tipo de código que funcionará bien en su configuración de desarrollo y luego se bloqueará cuando intente implementarlo en su producción EN VIVO . Primero debe cambiar los valores NULL a algo válido y luego no permitir NULLs. El 4to valor en change_column_null
hace exactamente eso. Ver change_column_null para más detalles.
Además, generalmente prefiero establecer un valor predeterminado para el campo, por lo que no será necesario que especifique el valor del campo cada vez que crea un nuevo objeto. Incluí el código comentado para hacer eso también.