2010-08-07 65 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

相关问题