FactoyGirl:在((创建)动作未被识别之前

时间:2017-06-05 20:01:29

标签: ruby-on-rails factory-bot has-many belongs-to

我正在尝试创建FactoryGirl工厂,这样当我致电FactoryGirl.create(:model_a)时, model_a 的任何依赖都会被创建并分配给该model_a工厂。但是,出于某种原因,我的方法不起作用,我无法弄清楚原因。

在我的工厂档案中,这就是我所拥有的:

FactoryGirl.define do
    factory :model_a do
        before(:create) do
            FactoryGirl.create(:model_b)
        end

        model_b {ModelB.first}
    end
end

现在,当我运行FactoryGirl.create(:model_a)时,我希望首先创建工厂 model_b (因为之前(:创建)调用)然后去回到创建工厂 model_a 并将工厂 model_b 分配给 model_b 关系 model_a

但相反,我收到错误model_b must exist, model_b cannot be blank

为什么没有创建工厂model_b以便我可以使用它?

1 个答案:

答案 0 :(得分:1)

您需要在model_a块内设置model_bbefore(:create)之间的关联。例如:

FactoryGirl.define do
  factory :model_a do
    # add model_a attributes as needed

    before(:create) do |model_a|
      model_a.model_b = ModelB.first || FactoryGirl.create(:model_b)
    end
  end
end

或者,根据OP的评论:

factory :model_a do
  # add model_a attributes as needed
  model_b { ModelB.first || FactoryGirl.create(:model_b) }
end