Ruby 如何创建通过关联传递覆盖的工厂

Ruby 如何创建通过关联传递覆盖的工厂,ruby,factory-bot,Ruby,Factory Bot,请尝试FactoryBot.build它将生成具有已定义关联的模型,但当您在最后一行将这些模型分配给帐户时,应稍后替换这些模型: r = FactoryBot.create(:reminder, account: Account.last) r.account.id == r.user.account.id 如果默认设置不适合您,可以将块传递给factory属性定义。在当前情况下,您希望确保帐户和用户匹配 r = FactoryBot.build(:reminder) u = FactoryB

请尝试
FactoryBot.build
它将生成具有已定义关联的模型,但当您在最后一行将这些模型分配给帐户时,应稍后替换这些模型:

r = FactoryBot.create(:reminder, account: Account.last)
r.account.id == r.user.account.id

如果默认设置不适合您,可以将块传递给factory属性定义。在当前情况下,您希望确保帐户和用户匹配

r = FactoryBot.build(:reminder)
u = FactoryBot.build(:user)
a = FactoryBot.create(:account, users: [u], reminders: [r])
如果工厂需要生成用户,这将确保为用户使用相同的帐户。这将满足您的要求。然而,还有另一个案例没有涵盖。如果您传入一个用户,但没有帐户,则将生成一个新帐户,并且这些帐户将不匹配。检查给定用户可以缓解这种情况

@overrides
具有传入的属性

factory :reminder do
  account
  user { build(:user, account: account) }
end
现在,如果只将用户或帐户传递到工厂,则生成的提醒将具有匹配的帐户

factory :reminder do
  account
  user { build(:user, account: account) }
end
factory :reminder do
  account { @overrides[:user]&.account || build(:account) }
  user { build(:user, account: account) }
end