制造 gem 循环依赖
Fabrication gem cyclic dependency
我在使用 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)
时,我得到了循环依赖,因为伪造消息会伪造新用户,伪造新用户会为他伪造消息等等。怎样才能避免这个恶性循环?
在这种情况下,我通常会有两个 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会自动保存消息。它将处理设置正确的引用。
我在使用 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)
时,我得到了循环依赖,因为伪造消息会伪造新用户,伪造新用户会为他伪造消息等等。怎样才能避免这个恶性循环?
在这种情况下,我通常会有两个 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会自动保存消息。它将处理设置正确的引用。