У меня есть модель с 3 миграциями:
- создает таблицу базы данных, (рабочий код уже существует)
- вставляет начальные записи в таблицу, (рабочий код уже существует)
- добавить новый столбец "___ тип" в таблицу (новая миграция)
После этого я добавил проверку в модель для принудительного присутствия нового атрибута "___ type" .
2. Миграция не удалась, потому что метод create хотел проверитьатрибут __type, но в то время этот столбец не существовал.
Чтобы избежать этого, я добавил к миграции предложение if column_names.include?(:__type)
, чтобы все миграции прошли.
Но после этого проверка RSpec завершается неудачно:
class MyModel
validates :__type, presence: true if column_names.include?(:__type)
Спецификация RSpec:
it { should validate_presence_of(:__type) }
Ошибка RSpec:
"MyModel неправильно проверил, что: тип __ не может быть пустым / ложным. После установки: тип __до ‹nil› средство сравнения ожидало, что MyModel будет недействительным, но вместо этого он действителен. "
Примечание:
Я намеренно использую стандартное ключевое слово if
вместо символа if:
, потому что для миграции 2. необходимо оценить это предложение при загрузке самого кода.Поэтому, когда я запускаю миграцию, для нее не требуется столбец "__type", но когда я запускаю сервер rails, он уже существует.
Как проверить наличие атрибута "___ type"