2012-05-20 3 views
0

J'ai un modèle category. J'utilise bijou d'origine pour le rendre comme une structure arborescente afin que nous puissions avoir des sous catégories. J'ai une usine simple pour category qui ressemble à ceciassociation Recusive avec factorygirl

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

J'ai un autre modèle business qui a une main_category et un sub_category. Voici mon usine pour l'entreprise

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 

Ce que je suis en train de faire ici est d'assigner main_sub_category du business une nouvelle catégorie qui est un sub_category et d'assigner le parent de cette category à main_category de l'entreprise.

Pour cela, j'ai créé une nouvelle usine appelée sous_catégorie usine: catégorie do séquence (: nom) {| n | "Catégorie # {n}"} usine: sous-catégorie faire | sous | usine sub.parent: catégorie fin fin

Lorsque je tente le code ci-dessus je reçois cette erreur

Factory already registered: category (FactoryGirl::DuplicateDefinitionError) 

J'ai essayé une autre façon de le faire

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

De cette façon, cela fonctionne mais quand je crée un objet métier en utilisant l'usine

@business = FactoryGirl.create :business 

Il me donne une erreur de validation

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

J'ai une validation unique sur les noms de catégorie.

a eu ce genre Tout d'une usine récursive aide délivre genre.

Merci

Répondre

0

Got Qu'il soit résolu, pour une raison mystérieuse, je ne comprends pas mon test db avait un déjà eu une seule entrée pour une catégorie avec un nom Catégorie1 qui a été crée le problème, supprimé manuellement en utilisant cette ligne mysql console et tout fonctionne maintenant.

Je me demande toujours pourquoi la base de données n'était pas claire, puisque je n'écris jamais pour tester db directement son testcase qui le fait ..: S

Questions connexes