ruby-on-rails-4 - tabla - remover campos en rails




Rails 4: ¿Eliminar la restricción no nula de la columna de la tabla con la migración? (3)

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

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.





rails-migrations