我正在尝试让工厂构建一个带有子对象Offering
的{{1}}对象,该对象将从其父级接收Rating
。
item_id
使用
创建产品FactoryGirl.define do
factory :offering do
item_id nil
element_id nil
association :rating, factory: :rating, strategy: :build, :item => item_id
end
end
但是在运行时,它会以错误中止
offering = FactoryGirl.create :offering, item_id: 21, element_id: 211
我认为发生错误是因为关联定义中的Failure/Error: offering = FactoryGirl.create :offering, item_id: 21, element_id: 211
ArgumentError:
Trait not registered: item_id
不是“懒惰”,因此未定义。
我该如何解决这个问题?
答案 0 :(得分:1)
不幸的是,我不知道有任何方法可以对关联进行懒惰评估(如果我错了,请有人纠正我)。你最好的选择可能是使用回调。假设您为:rating
定义了工厂,请尝试替换
association :rating, factory: :rating, strategy: :build, :item => item_id
与
after(:create) do |offering, evaluator|
FactoryGirl.build(:rating, item_id: evaluator.item_id, element_id: evaluator.element_id)
end
答案 1 :(得分:1)
您可以懒洋洋地定义关联:
FactoryGirl.define do
factory :offering do
item_id nil
element_id nil
rating { association(:rating, :item => item_id) }
end
end