Estoy intentando cambiar la posibilidad nil
de un atributo booleano en la columna existente :access_titles
en la tabla :profiles
. existe esa columna a causa de esta migración:change_column_null para la columna existente
class AddAccessItemsToProfiles < ActiveRecord::Migration
def self.up
add_column :profiles, :access_items, :boolean, :default => true
end
def self.down
remove_column :profiles, :access_items, :boolean, :default => nil
end
end
Para cambiar nil
, he intentado generar una migración como siempre he hecho:
rails g migration ChangeColumnNull :profiles :access_items :null => false
Pero eso no hice nada, así que lo hice una migración independiente:
rails g migration AddChangeColumnNullToAccessItems
Y dentro de ese añadí:
class AddChangeColumnNullToAccessItems < ActiveRecord::Migration
def self.up
change_column_null :profiles, :access_items, :boolean, false
end
def self.down
change_column_null :profiles, :access_items, :boolean, true
end
end
Luego ejecuté rake db:migrate
, reinicié mi servidor y no vi ningún cambio. Así que he intentado:
class AddChangeColumnNullToAccessItems < ActiveRecord::Migration
def self.up
change_column_null :profiles, :access_items, false
end
def self.down
change_column_null :profiles, :access_items, true
end
end
Luego hizo lo mismo: rake db:migrate
, reinicia el servidor, y nada ha cambiado.
¿Qué estoy haciendo mal? Esperaba que el valor booleano de :access_items
solo fuera verdadero y falso sin tener que volcar la base de datos.
ACTUALIZACIÓN: Tratando change_column_null :profiles, :access_items, false
me dio un error:
-- change_column_null(:profiles, :access_items, false)
rake aborted!
An error has occurred, this and all later migrations canceled:
PGError: ERROR: column "access_items" contains null values
: ALTER TABLE "profiles" ALTER "access_items" SET NOT NULL
Por lo tanto, por los consejos a continuación tenía que insertar change_column_null :profiles, :access_items, false, true
en mi migración.
Tuve que agregar la cuarta columna después de todo. Gracias una vez más! – tvalent2
No sabía que el cuarto parámetro era incluso posible. Hubiera pensado que esto ocurre tan a menudo que sería necesario. –