Указание ассоциаций на фабрике

Я хочу указать следующий тип ассоциаций через FactoryGirl. У меня есть три модели A, B и C, где модель C, которая находится в DataMapper, выглядит следующим образом:

Class C do
   include DataMapper::Resource
   belongs_to :A, :key=>true
   belongs_to :B, :key=>true
end

Я не знаю, как это указать в FactoryGirl, то есть, я хочу написать так:

factory :c do |c|
<To be Filled>
end

Пожалуйста помоги.

3 ответа

Решение

Не уверен насчет DataMapper (и как это вписывается / если оно включено в определение фабрики), но для ассоциаций сделайте это:

FactoryGirl.define do

  factory :C do |c|
    ...
    c.association :a
    c.association :b
  end  

end

Лицензия принадлежит LicenseTemplate

FactoryGirl.define do
  factory :license do
    start_date { Time.now}
    end_date   { Time.now + 30.days }

    factory :license_with_template do
      association :license_template, factory: :license_template
    end

    after(:build) do |doc|
      if doc.license_template
        doc.agents_count = doc.license_template.agents
        doc.requests = doc.license_template.requests
      end
    end
  end
end

приведенный выше код дает мне две фабрики 'license' и 'license_with_template'. блок after build инициализирует значения, которые должны быть инициализированы перед сохранением объекта.

FactoryGirl.define do
  factory :c do |f|
    f.a
    f.b
  end
end

если вы создадите фабрики для обоих a а также b и вы убедитесь, что имена фабрик совпадают с названиями модели, и это все, что вам нужно для определения связи. FactoryGirl создаст оба a а также b каждый раз, когда вы делаете: FactoryGirl.create(:c), Ассоциация должна быть указана только на одной стороне, предпочтительно принадлежность стороне.

Другие вопросы по тегам