Factory Bot 关联属性取决于邻居关联

Factory Bot Association Attribute Depends on Neighbor Association

我的应用程序是 Rails 6.1 with Factory Bot 和 RSpec。

我有一个包含两个不同所属关联的订单模型:公司和联系人。联系人也属于公司,创建一种循环关联。

我工厂的订单有:

FactoryBot.define do
  factory :order do
    factory :order_with_po do
      po_number {1234}
    end

    company
    contact
  end
end

但是,我遇到了问题,因为创建的联系人使用工厂机器人,而工厂机器人又为该联系人创建了一家新公司。同时还为订单创建了一个不同的公司。这两家公司不匹配,但对订单进行了验证,确保联系人的公司与订单的公司相同。

如何指定创建的联系人使用与订单创建的同一家公司?最佳做法是什么?

经过多次尝试和错误,我发现了以下作品:

FactoryBot.define do
  factory :order do
    factory :order_with_po do
      po_number {1234}
    end

    company

    before(:create) do |order|
      order.contact_id = FactoryBot.create(:contact, company_id: order.company_id).id
    end
  end
end

感觉有点奇怪,但这就是 Factory Bot 的工作原理。在构建订单后,它已经创建了公司,因此,您可以在 before create 挂钩中引用公司 ID。我将其用于指定订单联系人的公司 ID。