2012-05-20 51 views
0

我有一個category模型。我使用祖先的寶石,使它像一個樹結構,以便我們可以有子類別。我有一個簡單的工廠category看起來像這樣與FactoryGirl的Recusive協會

factory :category do 
    sequence(:name) { |n| "Category #{n}"} 
end 

我有具有main_categorysub_category另一個模型business。這是我廠的經營

factory :business do 
    sequence(:name) { |n| "businnes#{n}"} 
    sequence(:email) { |n| "busixy#{n}@example.com"} 
    sequence(:website) { |n| "www.example#{n}.com"} 
    association(:main_sub_category) 
    main_category   {Business.main_sub_category.parent} 

end 

我想在這裏做的是分配business一個新的類別,它是一個sub_categorymain_sub_category並於category的父分配給企業的main_category

爲了得到這個,我創建了一個名爲sub_category 工廠的新工廠:category do sequence(:name){| n | 「Category#{n}」} factory:subcategory do | sub | sub.parent工廠:類 結束 結束

當我嘗試上面的代碼中,我得到這個錯誤

Factory already registered: category (FactoryGirl::DuplicateDefinitionError) 

我嘗試另一種方式來做到這一點

factory :category do 
     sequence(:name) { |n| "Category #{n}"} 
     factory :subcategory do |sub| 
     sub.parent {FactoryGirl.create(:category)} 
     end 
    end 

這樣,它的工作原理但是當我使用工廠創建業務對象時

@business = FactoryGirl.create :business 

它給我驗證錯誤

ActiveRecord::RecordInvalid: Validation failed: Name has already been taken 

我有類別名稱唯一性驗證。

任何有這樣一個遞歸的工廠問題的幫助。

感謝

回答

0

得到它解決,對於某些神祕的原因,我不明白我的測試數據庫有一個已經有與名稱組別這是產生這一問題的類別單一入口,手動刪除用mysql該行控制檯和everthing現在工作。

我仍然想知道爲什麼數據庫不清楚,因爲我從來沒有直接寫測試數據庫測試它的測試用例..:S