Rails FactoryGirl 关联与唯一验证冲突

Rails FactoryGirl association conflicts with unique validation

我有一个 presentation,它属于 participant,而 participant 又属于 user

我的 FactoryGirl class 定义是:

  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

当我 运行 我的 spec: FactoryGirl.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)