2017-07-17 5 views
3

en essayant de créer une fabrique pour les enregistrements Region imbriqués. J'utilise ancestry gem à cette fin. Région est l'entité associée à la PlaceFactoryGirl - comment créer une hiérarchie d'enregistrements?

Lieu usine:

factory :place, traits: [:pageable] do 
    ... 
    association :region, factory: :nested_regions 
end 

usine Région:

factory :region do 
    level 'area' 
    factory :nested_regions do |r| 
    # create South Hampton region sequence 
    continent = FactoryGirl.create(:region, 
            level: Region.levels[:continent], 
            name: 'Europe ') 
    country = FactoryGirl.create(:region, 
           level: Region.levels[:country], 
           name: 'United Kingdom', 
           parent: continent) 
    state = FactoryGirl.create(:region, 
           level: Region.levels[:state], 
           name: 'England', 
           parent: country) 
    county = FactoryGirl.create(:region, 
           level: Region.levels[:county], 
           name: 'Hampshire', 
           parent: state) 
    name 'Southampton' 
    parent county 
    end 
end 

Lorsque je place débogage dans : nested_regions usine Je vois que ces hiérarchie de la région a été créée, mais le crochet before_validation de Place Region.all renvoie uniquement la région 'Southhampton'. Quelle est la bonne façon d'instancier la hiérarchie de toute la région en utilisant FactoryGirl?

Répondre

1

N'utilisez pas de variables à cette fin. Créez des usines distinctes pour chaque niveau et utilisez-la comme suit:

factory :region do 
    name 'Region' 

    factory :county 
    association :parent, factory: :region 
    level 'county' 
    end 

    factory :area 
    association :parent, factory: :county 
    level 'Area' 
    name 'area'  
    end 
end