Factorygirl 将 has_many 设置为 nil

Factorygirl set has_many as nil

我有一个 user 工厂,默认为 user_document

创建一个关联
FactoryGirl.define do
  factory :user do |u|
    sequence(:first_name) {|n| "firstname-#{n}" }
    after(:create) do |user|
      create(:user_document, document_type: :address_proof, user: user)
    end
  end
end

我想定义一个关联 user_document 为空的新工厂。我该怎么做呢 ?

[更新]

当我这样做时

  factory :user_with_no_doc_buyer do
    user_document nil
  end

我收到一条错误消息:

 NoMethodError: undefined method `user_document=' for #<User:0x007f97329c08f8>

当我这样做的时候 user_documents nil 我明白了

NoMethodError: undefined method `each' for nil:NilClass

谢谢

使用traits

FactoryGirl.define do
  factory :user do |u|
    sequence(:first_name) {|n| "firstname-#{n}" }
    trait :with_user_document
      after(:create) do |user|
        create(:user_document, document_type: :address_proof, user: user)
      end
    end
  end
end

使用文档创建用户

FactoryGirl.create(:user, :with_user_document)

使用空文档创建用户

FactoryGirl.create(:user)

我会创造两个特质。

FactoryGirl.define do
  factory :user do
    sequence(:first_name) {|n| "firstname-#{n}" }

    trait :with_document do
      after(:create) do |user|
        create(:user_document, document_type: :address_proof, user: user)
      end
    end

    trait :without_document do
      user_documents []
    end
  end
end

那你就打电话给你需要的工厂吧

FactoryGirl.create(:user, :with_document) 例如

编辑:已经看到您希望 with 文档成为默认文档。这很容易。您可以只使用您拥有的代码并采纳我对没有文档的特征的建议,您可以在需要时调用它。