Подтвердить что ты не робот

Миграция, чтобы изменить значение по умолчанию для поля и изменить все существующее значение записи на новое значение по умолчанию, только если оно имеет старое значение по умолчанию.

Мне нужно изменить значение по умолчанию для поля от 0 до 3, но у меня есть тысячи записей и хочу, чтобы эти записи изменили значение на 3 с 0, только если запись имеет значение по умолчанию 0, но для другие значения, такие как 1, 2, должны оставаться неизменными. как мне это сделать?

4b9b3361

Ответ 1

В процессе миграции вы должны использовать метод change_column для изменения настроек таблицы следующим образом:

change_column :my_models, :attribute_name, :integer, :default => 3

Затем, чтобы обновить все существующие записи, вместо того, чтобы перебирать все записи и обновлять их отдельно, вы можете использовать метод update_all следующим образом:

MyModel.update_all({ :attribute_name => 3 }, { :attribute_name => 0 })

Первый аргумент указывает методу, какое значение установить, а второе сообщает ему условие для обновления строк.

Ответ 2

ALTER TABLE your_table MODIFY your_column tinyint(1) NOT NULL DEFAULT 3;
UPDATE your_table SET your_column=3 WHERE your_column=0;
  • Предположим, что ваш столбец tinyint(1), замените себя, если не тот же
  • NOT NULL предполагает, что вы всегда вынуждаете столбец быть NOT NULL