2011-09-01 55 views
1

如果我有2个模型 - 例如:商店和品牌,我想要模仿在3到10个品牌之间的商店,使用工厂女孩做什么是一个好方法?工厂女孩 - HABTM关联对象的数量可变

factory :brand do |b| 
    b.name "Hip Brand" 
    b.url { "http://#{name}.com" } 
end  

factory :shop do |s| 
    name  "Cool Shop" 
    after_create { 
    count = 0 
    (5..10).to_a.sample.times do 
     count += 1 
     Factory(:brand, :shops => s, :name => "brand #{count}") 
    end 
    } 
end 

这显然不是这样做的方式,但应该给的想什么,我要实现的想法!

回答

3

我不能在此刻测试,但这应该工作:

Factory.define :brand, :class => Brand do |b| 
    b.name "Hip Brand" 
    b.url { "http://#{name}.com" } 
end  

Factory.define :shop, :class => Shop do |s| 
    s.name  "Cool Shop" 
    s.brands { 
    count = 0 
    Array(5..10).sample.times.map do 
     Factory.create(:brand, :name => "Brand #{count += 1}") 
    end 
    } 
end 

或者这样:

Factory.define :shop, :class => Shop do |s| 
    s.name  "Cool Shop" 
    s.brand_ids { 
    count = 0 
    Array(5..10).sample.times.map do 
     Factory.create(:brand, :name => "Brand #{count += 1}")[:id] 
    end 
    } 
end 
+0

第一个正常工作,谢谢。很高兴看到我离赛道不远。 – minikomi