Как добавить ограничение NOT NULL в новую запись? - PullRequest
1 голос
/ 14 марта 2020

Я хочу добавить новый столбец title в мою модель с ограничением NOT NULL. Вот что я попробовал:

class AddTitleColumnToTodoLists < ActiveRecord::Migration[6.0]
  def change
    add_column :todo_lists, :title, :string, :null => false
  end
end

Второй вариант:

class AddTitleColumnToTodoLists < ActiveRecord::Migration[6.0]
  def change
    add_column :todo_lists, :title, :string, 
    change_column_null :todo_lists, :title, false
  end
end

Но ничего не работает. Выдает ту же ошибку: Cannot add a NOT NULL column with default value NULL. Я использую SQLite3. В чем проблема?

1 Ответ

3 голосов
/ 14 марта 2020

Когда вы добавляете новый столбец в уже существующую таблицу, вы не можете добавить ограничение NOT NULL без предварительного значения по умолчанию или данных обратной засыпки для всех существующих записей. Потому что это сделает все существующие записи недействительными, потому что в этом новом столбце будет NULL.

Простым решением может быть добавление чего-либо полезного для всех записей перед добавлением ограничения NOT NULL.

def change
  add_column :todo_lists, :title, :string

  TodoLists.update_all(title: '-')

  change_column_null :todo_lists, :title, false
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...