Может ли FactoryGirl проверить наличие моделей в базе данных, прежде чем создавать новые? - PullRequest
4 голосов
/ 18 декабря 2011

У меня есть следующие заводские настройки:

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 

Причина, почемуЯ хочу сделать это, чтобы добавить записи в мою базу данных, которые будут заполнять поля выбора формы и чтобы я мог тестировать, используя огурец.

Ответы [ 2 ]

4 голосов
/ 19 декабря 2011

Вы можете использовать обратные вызовы для достижения этой цели:

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
0 голосов
/ 18 декабря 2011

Я думаю, вам нужны ассоциации. каждый: регион относится к государству и каждый: государство принадлежит к стране которые имеют взамен многие штаты и регионы.

Затем вы можете использовать эти ассоциации на своей фабрике.

Проверьте руководство по началу работы: https://github.com/thoughtbot/factory_girl/blob/master/GETTING_STARTED.md

...