假设我有一个拥有公寓单元的应用程序。它还有设施和garage_types。还有一些地方。每个位置可能有不同的单位,设施和garage_types。所以我创建了以下工厂:
FactoryGirl.define do
factory :unit do
name '608'
site
garage_type
amenity
end
factory :garage_type do
name 'garage_type a'
site
end
factory :amenity do
name 'amenity one'
site
end
factory :site do
name 'Site One'
phone '5121234567'
end
end
正如您所看到的,每个工厂都引用了一个站点。但是当创建单元时,它会创建它的关联站点,并创建garage_type和amenity,每个也创建一个站点。那么我如何让单位及其相关工厂都使用相同的网站而不是每个网站创建一个新网站?
答案 0 :(得分:3)
您可以使用factorygirl callbacks
我不知道你的联想,所以这里有一个例子:
factory :unit do
name '608'
after(:build) {|unit| unit.sites = [FactoryGirl.create(:site)]}
end
factory :site do
name 'Site One'
phone '5121234567'
after(:build) {|site| site.garage_types = [FactoryGirl.create(:garage_type)]}
end
如果您使用工厂创建unit
,那么在构建unit
之后,它将为新创建的site
创建新的关联unit
。然后,在创建site
后,它将创建关联的garage_type
。
答案 1 :(得分:0)
这是你想要做的吗?
site = FactoryGirl.create(:site)
unit = FactoryGirl.create(:unit, site: site)
garage_type = FactoryGirl.create(:garage_type, site: site)
amenity = FactoryGirl.create(:amenity, site: site)