Как добавить значение по умолчанию для столбца, который уже существует в процессе миграции?
Вся документация, которую я могу найти, показывает, как это сделать, если столбец еще не существует, но в этом случае он существует.
Как добавить значение по умолчанию для столбца, который уже существует в процессе миграции?
Вся документация, которую я могу найти, показывает, как это сделать, если столбец еще не существует, но в этом случае он существует.
Вот как вы должны это сделать:
change_column :users, :admin, :boolean, :default => false
Но некоторые базы данных, такие как PostgreSQL, не будут обновлять поле для ранее созданных строк, поэтому убедитесь, что вы обновляете поле также вручную при переносе.
up
блок, а не вchange
блок. Вы можете оставитьdown
блок пустым. Таблица не вернется к исходному состоянию, но миграцию можно откатить.источник
from:
иto:
если вы хотите, чтобы он был обратимым :)from
иto
было добавлено в Rails 5+ в этом коммите: github.com/rails/rails/pull/20018/filesДля Rails 4+ используйте
change_column_default
источник
def change
`add_column: foos,: name, default:" что-то для существующих значений "` `change_column_default: foos,: name, default:" "`end
change_column_default :products, :approved, from: true, to: false
- но он тоже не работает.Использование
def change
означает, что вы должны написать миграции, которые являются обратимыми. Иchange_column
не является обратимым. Вы можете идти вверх, но не можете идти вниз, так какchange_column
это необратимо.Вместо этого, хотя это может быть пара дополнительных строк, вы должны использовать
def up
иdef down
Так что если у вас есть столбец без значения по умолчанию, то вы должны сделать это, чтобы добавить значение по умолчанию.
Или, если вы хотите изменить значение по умолчанию для существующего столбца.
источник
** Рельсы 4.X + **
Начиная с Rails 4, вы не можете сгенерировать миграцию для добавления столбца в таблицу со значением по умолчанию . Следующие шаги добавляют новый столбец в существующую таблицу со значением по умолчанию true или false.
1. Запустите миграцию из командной строки, чтобы добавить новый столбец.
Приведенная выше команда добавит новый столбец в вашу таблицу.
2. Установите для нового значения столбца значение TRUE / FALSE, отредактировав новый созданный файл миграции.
** 3. Чтобы внести изменения в таблицу базы данных приложения, выполните следующую команду в терминале **
источник
Выполнение:
Это сгенерирует эту миграцию:
Установите значение по умолчанию, добавив: default => 1
Бегать:
источник
Key is not present in table error
.Вот что вы можете сделать:
РЕДАКТИРОВАТЬ: ... но, очевидно, это ошибка новичка!
источник
before_save