2016-11-14 38 views
0

我有一個user工廠是默認創建user_documentFactorygirl設置的has_many作爲零

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 

感謝

回答

1

我想創建兩個特點。

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)例如

編輯:有沒有看到你想要的文件具有成爲默認。這很簡單。你可以使用你所擁有的代碼,並且對我沒有任何文件的特徵提出建議,你可以在需要時調用它。

+0

好的,謝謝你,我有2個問題: –

+0

好的謝謝你,但是user_document nil對我不起作用'undefined method user_document ='for#''用戶has_many:user_documents' –

+0

我的歉意。它應該是'[]'而不是零。我已經更新了我的答案 –

1

使用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) 
+0

事情是,我想使with_user_document我的默認行爲。 –

+0

想法是使用特質。你可以定義你的特點,但是你想要 – usha