2

factory_girlアソシエーションが指す必要のあるランダムインスタンスを指定する方法はありますか?たとえば、私は1つと1つのオブジェクトを持っていLikeます。新しいものを生成するだけでなく、ファクトリに既存のランダムと好きなランダムを選択してもらいたいです。以下のスニペットの種類の作品:belongs_toUserSocialUnitLikeUserSocialUnit

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

確かにランダムなユーザーを選択しますが、これを実行すると、ランダムなユーザーは1回だけ選択されるようです。

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

同じユーザーでたくさんのいいねを作成します。それは理にかなっていると思います...ファクトリは一度定義されてから、何度も再利用されます。

シーケンスを使用してランダム性を強制することができます。工場定義内でそれを定義する方法はありますか、それともシーケンスはそれを行うための最良の方法ですか?

ありがとう。

4

1 に答える 1

7

ファクトリの定義時にユーザーを定義する代わりに、遅延属性を使用する必要があります。これにより、代わりにファクトリが使用されるたびにユーザーが定義されます。

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

于 2010-08-07T13:31:14.200 に答える