Как использовать factory_girl для построения родительской модели внутри дочернего элемента

#ruby-on-rails #factory-bot

#ruby-on-rails #factory-бот

Вопрос:

У меня есть такая настройка:

   factory :agency do |a|
    a.agents_attributes { [FactoryGirl.attributes_for(:agent)] }
    a.subdomain 'clear'
    a.name 'ClearProperty'
  end

  factory :agent do |a|
    agency
    a.email 'user@test.com'
    a.password 'please'
  end
  

У агентства есть множество агентов, и агентство должно присутствовать. Как разрешить эту проблему с куриным яйцом? Я хочу сделать Factory(:agent), но это вызовет Factory(:agency), который затем попытается создать другой агент.

Комментарии:

1. почему бы вам не создать склонение вашей agency фабрики, которое не создало бы ничего agent .

2. @apneadiving Логика бизнеса такова, что агентство недействительно без агента, но для фабрик я, безусловно, мог бы это сделать. Если не появится лучшего решения, я приму его.

3. @apneadiving Если подумать, я не думаю, что это сработает. Агентство проверяет наличие одного набора атрибутов agent_attributes.

4. перечитывая ваш вопрос, я не вижу никакой реальной проблемы. Вы можете легко определять связанные объекты. Посмотрите здесь: robots.thoughtbot.com/post/254496652/aint-no-calla-back-girl . Таким образом, вы могли бы просто передать созданный агент агентству.

5. вы заметили, что эпизод factory girl был обновлен в Railscasts?

Ответ №1:

Вот что я придумал:

   factory :agency do |a|
    a.agents_attributes { [FactoryGirl.attributes_for(:agent)] }
    a.subdomain 'clear'
    a.name 'ClearProperty'
  end

  factory :agent do |a|
    a.email 'user@test.com'
    a.password 'please'
    a.after_create { |a| FactoryGirl.create(:agency, agent_ids: [a.id], agents_attributes: {}) }
  end