Требуется указать идентификатор на фабрике для ассоциации - PullRequest
1 голос
/ 20 февраля 2020

У меня есть фабрика, которая создает ассоциацию после создания. Я не работаю, пока не укажу внешний ключ. Хотя внешний ключ указан в модели. Это нормально? Если нет, то как мне это исправить?

фабрика

trait :with_csr do
  after :create do |cc|
    cc.csrs << create(:csr, signed: true, certificate_content_id: cc.id)
  end
end

сертификат_контент модель

has_many :csrs, dependent: :destroy

модель csr

belongs_to  :certificate_content, touch: true, foreign_key: 'certificate_content_id'

1 Ответ

1 голос
/ 20 февраля 2020

Я считаю, что это проблема порядка операций. #create FactoryBot немедленно сохранит новую запись csr в базе данных, до того, как оператор << попытается создать связь между записями.

Попробуйте изменить create на build и удалите certificate_content_id: cc.id. build должен создавать, но не сохранять запись. И тогда << создаст связь и сохранит запись.

Редактировать : в качестве альтернативы, вы можете оставить #create и просто удалить <<:

after :create do |cc|
  create(:csr, signed: true, certificate_content_id: cc.id)
end

Это сработало бы так же хорошо.

...