factory_girl>与懒惰属性的关联

时间:2013-04-19 16:05:56

标签: ruby-on-rails activerecord factory-bot

我正在尝试让工厂构建一个带有子对象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 不是“懒惰”,因此未定义。

我该如何解决这个问题?

2 个答案:

答案 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