на заводской девочке / фабричном боте, как мне получить условное начальное число для второй таблицы поиска - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть два класса PublisherLevel и Publisher. Если мы создаем издателя, счетчик PublisherLevel должен быть равен 14 - счетчик разных типов уровня издателя. В нашей базе данных у нас есть ограничение внешнего ключа. Это просто справочная таблица. Я хотел бы сделать что-то вроде этого:

FactoryGirl.define do
  if PublisherLevel.count == 0 
    puts "you have 0 publisher_levels and should seed it"
    seed_publisher_levels
  end
  factory :company do
    name { Faker::Company.name }
    display_name "Sample Company"
    publisher_level 
  end
end

но первый оператор if не вызывается. Я видел это Использование factory_girl в Rails с ассоциациями, которые имеют уникальные ограничения. Получение повторяющихся ошибок , но ему 8 лет, и есть подозрение, что есть более элегантное решение. Какой канонический способ сделать это?

1 Ответ

0 голосов
/ 04 сентября 2018

Кажется, что вы хотите начальные данные . Вы можете создать свой собственный класс seed для кэширования необходимых данных:

class Seeds
  def [](name)
    all.fetch(name)
  end

  def register(name, object)
    all[name.to_sym] = object
  end

  def setup
    register :publisher_level_1, FactoryGirl.create(:publisher_level, :some_trait)
    register :publisher_level_2, FactoryGirl.create(:publisher_level, :some_other_trait)
  end

  private

  def all
    @all ||= {}
  end
end

А потом в вашем test_helper.rb позвоните:

require 'path/to/seeds.rb'
Seeds.setup

Наконец, отошлите это на свои фабрики:

factory :company do
  publisher_level { Seeds[:publisher_level_1] }
end

Этот код является лишь примером использования, вам придется настроить его так, чтобы он вел себя в соответствии с вашими потребностями.

...