2

当我与fabrication宝石一起工作时,我得到了循环依赖。在这里,我会告诉你我做了什么。让我们假设我有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)时,由于制造消息制造新用户,制造新用户为他制作消息等,我得到循环依赖关系。我怎样才能避免这个魔鬼圈?

回答

1

在这种情况下,我通常会有两个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自动保存。它将处理设置正确的参考。

+0

好的,谢谢!第二种方法对我来说是新东西。我接受答案,但也许,另一个人提供更好的东西? – asiniy