3

fabrication使用gem时,我有一个循环依赖。在这里,我将向您展示我所做的。假设我有 2 个模型:

class User < AR::Base
  has_many :messages


class Message < AR::Base
  belongs_to :user

因此,他们的制造商将是:

Fabricator(:user) do
  # bla-bla-bla
  messages(count: 5)
end

Fabricator(:message) do
  # bla-bla-bla
  user
end

好像没事吧?但是当我运行Fabricate(:user)或者Fabricate(:message)我得到循环依赖时,因为消息的制造会制造新用户,制造新用户会为他制造消息等等。我怎样才能避免这个恶魔般的圈子?

4

1 回答 1

2

user在这样的实例中,我通常会有两个制造商。

Fabricator(:user)

Fabricator(:user_with_messages, from: :user) do
  messages(count: 5)
end

您也可以这样做以使您拥有的工作。

Fabricator(:user) do
  messages(count: 5) { Fabricate.build(:message, user: nil) }
end

保存用户时,AR 会自动保存消息。它将处理设置正确的引用。

于 2015-06-20T11:48:02.357 回答