我的问题似乎很普遍,但是我在文档或互联网本身中找不到任何答案。

这个问题似乎是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

10-08 20:00