Я пытаюсь изменить возможность nil
логического атрибута в существующем столбце :access_titles
в таблице :profiles
.Этот столбец существует из-за этой миграции:
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
Чтобы изменить nil
, я попытался сгенерировать миграцию, как всегда:
rails g migration ChangeColumnNull :profiles :access_items :null => false
Но это ничего не дало, поэтому я сделалавтономная миграция:
rails g migration AddChangeColumnNullToAccessItems
И в этом я добавил:
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
Затем я запустил rake db:migrate
, перезапустил свой сервер и не увидел изменений.Поэтому я попытался:
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
Затем сделал то же самое: rake db:migrate
, перезагрузил сервер и ничего не изменилось.
Что я делаю не так?Я надеялся, что только логическое значение :access_items
будет истинным и ложным без необходимости выгрузки базы данных.
ОБНОВЛЕНИЕ: Попытка change_column_null :profiles, :access_items, false
Я получил ошибку:
-- 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
Итак, согласно приведенному ниже совету, мне пришлось вставить change_column_null :profiles, :access_items, false, true
в мою миграцию.