Ответ 1
change_column_default(table_name, column_name, nil)
также полностью отменяет значение по умолчанию для столбца. Нет необходимости использовать выполнение.
У меня проблема, что у меня есть миграция в Rails, которая устанавливает значение по умолчанию для столбца, как этот пример:
def self.up
add_column :column_name, :bought_at, :datetime, :default => Time.now
end
Предположим, я хотел бы отказаться от настроек по умолчанию в более поздней миграции, как это сделать с помощью миграции рельсов?
Моим текущим обходным решением является выполнение пользовательской команды sql в миграции рельсов, например:
def self.up
execute 'alter table column_name alter bought_at drop default'
end
Но мне не нравится этот подход, потому что теперь я зависим от того, как базовая база данных интерпретирует эту команду. В случае изменения базы данных этот запрос, возможно, больше не работает, и миграция будет нарушена. Итак, есть ли способ выразить отмену установки по умолчанию для столбца в рельсах?
change_column_default(table_name, column_name, nil)
также полностью отменяет значение по умолчанию для столбца. Нет необходимости использовать выполнение.
change_column_default(table_name, column_name, default)
Устанавливает новое значение по умолчанию для столбца. Если вы хотите установить значение по умолчанию к NULL, вам не повезло. Тебе нужно to DatabaseStatements # выполнить соответствующий SQL-оператор.Примеры
change_column_default(:suppliers, :qualification, 'new') change_column_default(:accounts, :authorized, 1)
Следующий фрагмент, который я использую для создания столбцов NULL
NOT NULL
, но пропустите DEFAULT
на уровне схемы:
def self.up
change_column :table, :column, :string, :null => false, :default => ""
change_column_default(:table, :column, nil)
end
Рельсы 4
change_column :courses, :name, :string, limit: 100, null: false