Миграция, чтобы изменить значение по умолчанию для поля и изменить все существующее значение записи на новое значение по умолчанию, только если оно имеет старое значение по умолчанию.
Мне нужно изменить значение по умолчанию для поля от 0 до 3, но у меня есть тысячи записей и хочу, чтобы эти записи изменили значение на 3 с 0, только если запись имеет значение по умолчанию 0, но для другие значения, такие как 1, 2, должны оставаться неизменными. как мне это сделать?
Ответы
Ответ 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