gpt4 book ai didi

ruby - 根据在同一工厂的另一个字段中设置的数字创建工厂字段值

转载 作者:太空宇宙 更新时间:2023-11-03 16:12:38 24 4
gpt4 key购买 nike

我有一个表,其中 data_value 是根据 option_id 设置的。例子,

 option_id: 1 , data_value: `date value`
option_id: 2, data_value: number
option_id: 3, data_value: text


FactoryBot.define do
factory :test do
sequence(:option_id, (1..3).cycle) { |n| n }
data_value {??}
end
end

如何让 FactoryBot 根据 option_id 生成 data_value?

最佳答案

您可以使用 after(:build) callback 使其工作这将使您可以在生成的对象创建之后但返回之前对生成的对象执行操作。根据您的类的实际工作方式,您可能不想将 option_id 直接存储在类中。在这种情况下,you can use the values object在 block 中读取传递给工厂的原始值。

require 'factory_bot'
require 'ostruct'

FactoryBot.define do
factory :test, class: OpenStruct do
sequence(:option_id, (1..3).cycle) { |n| n }

after(:build) do |o, values|
o.data_value = case values.option_id
when 1
Time.now
when 2
5
when 3
'hello world'
end
end
end
end

puts(FactoryBot.build(:test))
puts(FactoryBot.build(:test))
puts(FactoryBot.build(:test))

最后三行将输出如下内容:

#<OpenStruct option_id=1, data_value=2019-09-24 00:44:01 +0000>
#<OpenStruct option_id=2, data_value=5>
#<OpenStruct option_id=3, data_value="hello world">

关于ruby - 根据在同一工厂的另一个字段中设置的数字创建工厂字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58070628/

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