Rails FactoryGirl 关联与唯一验证冲突



我有一个属于participantpresentation,而又属于user

我的工厂女孩类定义是:

  factory :presentation do
    sequence(:title) { |n| "Some topic nr #{n}" }
    association :participant
  end
  factory :participant do
    name "John Doe"
    association :user, :guest
  end
  factory :user do
    trait :admin do
      ident 1000
      roles ["admin"]
    end
    trait :guest do
      ident 9000
      roles ["guest"]
    end    
  end

当我运行我的specFactoryGirl.create_list(:presentation, 3)时,我收到错误,用户已经被占用,因为ident值必须是唯一的。

问题是,我不想为每个演示文稿创建新对象。它应该属于同一个participant对象(因此属于同一个user对象(。

所以我想要的是:创建属于同一参与者的 3 个演示文稿。

构建后可以使用关联:

  factory :presentation do
    sequence(:title) { |n| "Some topic nr #{n}" }
    after(:build) do |s|
        unless Participant.count == 0
          s.participant = Participant.first
        end
        s.participant ||= create(:participant)
    end
  end

您可以先创建一个participant

@participant = FactoryGirl.create(:participant)

然后,在创建演示文稿时分配该participant

@presentations = FactoryGirl.create_list(:presentation, 3, participant: @participant)

最新更新