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