2011-12-17 2 views
4

나는 다음과 같은 공장 설정이 있습니다FactoryGirl은 새로운 모델을 생성하기 전에 모델에 이미 존재하는 모델을 확인할 수 있습니까?

FactoryGirl.define do 

    factory :country do |f| 
    f.name "USA" 
    f.country_code "USA" 
    f.currency_code "USD" 
    end 

    factory :region do |f| 
    f.name "East Coast" 
    f.country {Country.first} 
    end 

    factory :state do |f| 
    f.name 'CA' 
    f.region {Region.first} 
    f.country {Country.first} 
    end 

end 

내가이 지역 & 상태 공장에서하고 싶은 것은 항목이 이미 국가의 데이터베이스에 존재하는지 확인하는 것입니다, '예'인 경우 그 다음을 사용하는 경우에만 없음을 항목이 발견되면 새 모델을 만들어야합니다. 여기

이를 생성하는 방법을 잘 내가 생각하고있는 내용의 예이지만, :

factory :state do |f| 
    f.name 'CA' 
    f.region {Region.first || Factory(:region} 
    f.country {Country.first || Factory(:state} 
end 
내가 이렇게 할 이유는 양식을 선택 웁니다 내 데이터베이스에 항목을 삽입하는 것입니다

필드 & 그래서 오이를 사용하여 테스트 할 수 있습니다.

+0

당신이 이런 짓을 했을까 왜? 이미지를 그럴만한 이유가 없습니다. – lucapette

+1

지역 및 국가 항목이 이미 존재하지 않는 한 내 데이터베이스 스키마 상태로 인해 저장할 수 없습니다. 테스트를 위해 최소 3 가지 상태 모델이 필요하지만 지역 및 국가에 대해 하나의 행만 삽입하고 싶습니다. – Jason

답변

4

당신은 달성하기 위해 콜백을 사용할 수 있습니다이 :

FactoryGirl.define do 

    factory :country do |f| 
    f.name   "USA" 
    f.country_code "USA" 
    f.currency_code "USD" 
    end 

    factory :region do |f| 
    f.name "East Coast" 
    after_build {|r| r.country = (Country.first || Factory(:country))} 
    end 

    factory :state do |f| 
    f.name 'CA' 
    after_build do |s| 
     s.region = Region.first || Factory(:region) 
     s.country = Country.first || Factory(:country) 
    end 
    end 

end 
관련 문제