gpt4 book ai didi

ruby-on-rails - 在 factory_girl 中填充与 child 的关联

转载 作者:数据小太阳 更新时间:2023-10-29 06:22:46 26 4
gpt4 key购买 nike

我有一个模型 Foo 有_many 'Bar'。对于这些对象中的每一个,我都有一个 factory_girl 工厂。 Bar 的工厂与 Foo 有关联;它会在创建 Bar 时实例化一个 Foo。

我想要一个创建包含 Bar 的 Foo 的工厂。理想情况下,此 Bar 将通过 :bar 工厂创建,并遵守用于创建 Foo 的构建策略(创建/构建)。

我知道我可以直接调用 :bar 工厂,然后从新的 Bar 获取 Foo 引用。我想避免这种情况;在我的测试用例中,重要的对象是 Foo;给Bar厂打电话好像有点迂回。此外,我可以看到需要具有多个 Bars 的 Foo。

这在 factory_girl 中可能吗?您如何定义父级中的这种关系?

最佳答案

Factory.after_ hooks 似乎是成功执行此操作的唯一方法。我找到了一种无需复制代码即可维护构建策略的方法:

Factory.define :foo do |f|
f.name "A Foo"
f.after(:build) { |foo|
foo.bars << Factory.build(:bar, :foo => foo)
}
f.after(:create) { |foo|
foo.bars.each { |bar| bar.save! }
}
end

documentation说明如果使用 :create 构建策略,after_build 将在 after_create 之前调用。如果使用:build,那么只调用after_build,大家都很高兴。

我还创建了一个抽象的通用版本 at this gist保持干燥。

关于ruby-on-rails - 在 factory_girl 中填充与 child 的关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2937326/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com