Наша база данных rails предварительно заполнена некоторыми данными для некоторых из наших статических моделей. Например, у нас есть модель DocumentType
, которая заполняется / обновляется через db/seeds.rb
. Пользователи не могут изменять эту модель.
Однако, похоже, это не очень хорошо работает с factory_bot; когда я пытаюсь:
create(:document_type)
Я получаю сообщение об ошибке:
ActiveRecord :: RecordNotUnique:
PG :: UniqueViolation: ОШИБКА: двойное значение ключа нарушает ограничение уникальности «document_types_pkey»
ДЕТАЛИ: Ключ (id) = (1) уже существует.
Каждый раз, когда я запускаю тест, эта ошибка возникает, но ключ (id), который пытается сохранить приращения. Затем, в конце концов, тест проходит, когда он выходит за пределы диапазона засеваемых данных.
Что я не понимаю, так это то, почему factory_bot фактически устанавливает значение id
и не позволяет базе данных назначать его при сохранении записи.
document_type factory
FactoryBot.define do
factory :document_type do
label 'Alien Spacecraft License'
description 'It should be obvious, I think'
created_at { Time.now - 30.days }
updated_at { Time.now - 30.days }
end
end
попытки исправить
Я попытался создать файл фикстуры, который имитирует именно то, что находится в файле seed.rb - когда я это делаю, factory_bot учитывает значения id
, установленные в фикстуре. Но это вызывает много дублирующих усилий (я должен синхронизировать семена с приборами).
Я смотрел на использование приборов для заполнения базы данных, но, к сожалению, в нашем случае мы используем жестко запрограммированные идентификаторы в начальных данных для вставки / обновления ... поэтому не кажется хорошим вариантом заполнения .
Интересно, есть ли у кого-нибудь идеи? Спасибо!