gpt4 book ai didi

ruby-on-rails - 在 factorygirl 中,有什么方法可以在初始化 field2 时引用 field1 的值?

转载 作者:行者123 更新时间:2023-12-03 23:36:31 25 4
gpt4 key购买 nike

在工厂中,如何引用正在创建的对象中其他字段之一的值?

假设我的模型 Widget 有两个字段,nicknamefullname
在我的工厂中,我想在每次创建工厂时使用 Faker 创建一个不同的随机昵称。 (终于想通了我必须使用序列(:昵称),否则所有工厂的名称都相同。)

为了使某些断言更易于测试,我想生成一个基于昵称的全名,例如 fullname = "Full name for #{nickname}"

FactoryGirl.define do
factory :widget do
sequence(:nickname) { |n| Faker::Lorem.words(2).join(' ') }
sequence(:fullname) { |n| "Full name for " + ????? }
end
end

不管我放在哪里???去,我得到 #<FactoryGirl::Decl...而不是昵称设置的任何内容。

我尝试了 name、name.to_s、name.value... 似乎没有任何效果。

最佳答案

是的。这是工厂女孩的一个例子 Getting Started doc :

factory :user do
first_name "Joe"
last_name "Blow"
email { "#{first_name}.#{last_name}@example.com".downcase }
end

FactoryGirl.create(:user, last_name: "Doe").email
# => "joe.doe@example.com"

另外,我通常在 config/application.rb 中单独定义我的序列。 :
FactoryGirl.define do
sequence(:random_string) { |s| ('a'..'z').to_a.shuffle[0, 30].join }
end

你可能会从做同样的事情中受益。然后你可能会做这样的事情:
FactoryGirl.define do
factory :widget do
nickname generate(:name_faker) # assuming you had defined a :name_faker sequence
fullname generate("Full name for #{nickname}")
end
end

关于ruby-on-rails - 在 factorygirl 中,有什么方法可以在初始化 field2 时引用 field1 的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12765252/

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