tabla remover rails columna campos agregar ruby-on-rails-4 rails-migrations

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.