#ruby-on-rails #enums
Вопрос:
У меня есть огромное количество записей в БД, и я хочу добавить новый столбец. Однако я не хочу устанавливать значения по умолчанию для старых существующих записей, только для новых.
Когда я установлю значение по умолчанию для миграции (как показано ниже), все старые существующие получат значение по умолчанию.
add_column :records, :status, :integer, default: 0
Проблема в том, что если я добавлю значение по умолчанию только в перечисление, вот так:
enum status: {
to_review: 0,
pending: 1,
processed: 2
}, _default: :to_review
Я получаю эту ошибку
NoMethodError (undefined method `all?' for :to_review:Symbol)
Как я могу добавить новый столбец, установить значение по умолчанию и по-прежнему сохранять старые записи как пустые?
Ответ №1:
Глядя на документацию здесь, кажется, что вы на правильном пути
https://api.rubyonrails.org/v6.1.4/classes/ActiveRecord/Enum.html
enum status: { to_review: 0, pending: 1, processed: 2}, _default: :to_review
Примечание: Поддержка _default была добавлена в rails 6.1 — запрос на вытягивание
Пожалуйста, проверьте, используете ли вы поддерживаемую версию
Комментарии:
1. Ты прав! Я тщательно проверю вашу ссылку. К сожалению, мы используем 6.01. Другой альтернативой было бы использование before_save, но это был бы дополнительный обратный вызов.
2. Ну, вы всегда можете установить значение по умолчанию на уровне базы данных при переносе.