Указание ассоциаций на фабрике
Я хочу указать следующий тип ассоциаций через 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)
, Ассоциация должна быть указана только на одной стороне, предпочтительно принадлежность стороне.