2010-08-07 68 views
2

factory_girl有沒有辦法指定一個關聯應該指向的隨機實例?例如,我有一個Like對象,其中一個和一個SocialUnit。我想Like工廠選擇隨機存在User和隨機SocialUnit喜歡,而不是隻生成一個新的。以下代碼段排序的工作原理:在factory_girl定義中指定一個隨機關聯對象

Factory.define :like do |f| 
    if User.all.count > 0 
    f.user User.all.sort_by{ rand }.first 
    else 
    f.association :user 
    end 
end 

它確實挑選一個隨機的用戶,但它似乎是隨機用戶只得到回升一次,因爲運行此

def create_hauls 
    5.times do |i| 
    Factory(:haul) 
    end 
end 

創建了一堆喜歡的所有同一個用戶。我想這是有道理的......工廠被定義一次,然後重複使用一堆。

我可以使用序列強制隨機性;有沒有一種方法可以在工廠定義中定義它,或者序列是實現它的最佳方式?

謝謝。

回答

7

您希望使用lazy attribute而不是在定義工廠時定義用戶。這將在每次使用工廠時定義用戶。

f.user { (User.all.count > 0 ? User.all.sort_by{ rand }.first : Factory.create(:user)) }

+0

啊,謝謝。我已經用一個序列實現了一個解決方案(用'Factory.next(:random_user)'替換'如果User.all.count> 0',但回頭看,這是錯誤的,因爲它仍然要檢查' User.all.count> 0'只有一次。感謝您的幫助! – unsorted 2010-08-07 17:06:11

相關問題