在factory_girl定义中指定随机关联对象

时间:2010-08-07 12:18:58

标签: ruby-on-rails factory-bot

factory_girl中是否有办法指定关联应指向的随机实例?例如,我有Like个对象belongs_to一个User和一个SocialUnit。我希望Like的工厂选择一个随机的User和一个随机的SocialUnit来代替,而不仅仅是生成一个新的。{1}}。以下片段有效:

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

使用相同的用户创建一堆喜欢的东西。我想这是有道理的......工厂定义了一次,然后重复使用了很多次。

我可以使用序列强制随机性;有没有办法在工厂定义中定义它,或者序列是最好的方法呢?

感谢。

1 个答案:

答案 0 :(得分:7)

您希望在定义工厂时使用lazy attribute而不是定义用户。这将在每次使用工厂时定义用户。

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