我的问题似乎很普遍,但是我在文档或互联网本身中找不到任何答案。
这个问题似乎是has_many while respecting build strategy in factory_girl的克隆,但在该工厂发布后2.5年后,girl_girl发生了很大变化。
我有一个具有has_many关系的模型,称为照片。我想填充这个与保留我选择的构建策略有很多关系。
如果我调用offering = FactoryGirl.build_stubbed :offering, :stay
,我希望offering.photos
是 stub 模型的集合。
我发现实现这一目标的唯一方法是:
factory :offering do
association :partner, factory: :named_partner
association :destination, factory: :geolocated_destination
trait :stay do
title "Hotel Gran Vía"
description "Great hotel in a great zone with great views"
offering_type 'stay'
price 65
rooms 70
stars 4
event_spaces 3
photos do
case @build_strategy
when FactoryGirl::Strategy::Create then [FactoryGirl.create(:hotel_photo)]
when FactoryGirl::Strategy::Build then [FactoryGirl.build(:hotel_photo)]
when FactoryGirl::Strategy::Stub then [FactoryGirl.build_stubbed(:hotel_photo)]
end
end
end
end
不必说它必须存在一种更好的方法。
有想法吗?
最佳答案
这是Flipstone答案的较简洁版本:
factory :offering do
trait :stay do
...
photos do
association :hotel_photo, :strategy => @build_strategy.class
end
end
end