2011-08-11 4 views
1

J'ai écrit un test rspec qui ajoute dans ma rubrique des unités.Factory girl association

J'ai deux modèles => Rubrique et unités. Les rubriques ont plusieurs unités. Il ressemble à ceci:

@rubric.units.push Factory :text_unit 
@rubric.save 

Je trouve factory_girl et a essayé de réécrire ce code comme une usine. Mais ça ne fonctionne pas. Comment puis-je écrire cette association dans Factory Girl. Je essayé:

factory :common_rubric , :class => :common_info_rubric do |f| 
    f.sequence(:name) {|n| "common_info_rubric#{n}"} 
    end 

    factory :text_unit, :class => text_info_unit do |f| 
    f.association :common_rubric_with_unit 
    f.sequence(:name) {|n| "text_unit#n}" } 
    end 

    factory :common_rubric_with_unit , :parent => :common_rubric do |f| 
    f.units { |unit| unit.association(:text_info_unit) } 
    end 

J'ai toujours erreur

SystemStackError: 
     stack level too deep 
+0

question mis à jour – nub

+0

Tout problème était le nom undefault de la table dans les modèles. Et après avoir lu http://robots.thoughtbot.com/post/254496652/aint-no-calla-back-girl je résous le problème. C'est ici http://pastie.org/2355251 (parce que je ne peux pas répondre à ma question jusqu'à 7 heures) – nub

Répondre

1

Tout problème était le nom undefault de la table dans les modèles. Et après lecture http://robots.thoughtbot.com/post/254496652/aint-no-calla-back-girl i résoudre le problème

factory :common_rubric , :class => :common_info_rubric do |f| 
    f.sequence(:name) {|n| "common_info_rubric#{n}"} 
    end 

    factory :text_unit, :class => :text_info_unit do |f| 
    f.sequence(:name) {|n| "text_unit#{n}" } 
    end 

    factory :common_rubric_with_unit, :parent => :common_rubric do |f| 
    f.after_create {|a| Factory(:text_unit, :rubric => a) } 
    end 
6

Vous avez là une référence circulaire. Lorsque vous créez un text_unit, un common_rubric_with_unit associé est créé. La définition de common_rubric_with_unit crée un text_unit associé et nous sommes de retour au début.

Vous devez supprimer l'une des associations de part et d'autre, cela devrait fonctionner:

factory :text_unit, :class => text_info_unit do |f| 
    f.association :common_rubric_with_unit 
    f.sequence(:name) {|n| "text_unit#n}" } 
end 

factory :common_rubric_with_unit , :parent => :common_rubric do |f| 
end 
Questions connexes