首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在factorygirl中,有没有办法在初始化field2时引用field1的值?

在factorygirl中,有没有办法在初始化field2时引用field1的值?
EN

Stack Overflow用户
提问于 2012-10-07 09:03:28
回答 1查看 5.6K关注 0票数 15

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

假设我的模型小部件有两个字段,nicknamefullname

在我的工厂中,我想使用Faker在每次创建工厂时创建一个不同的随机昵称。(最后我想我必须使用sequence(:nickname),否则所有工厂的名称都是相同的。)

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

代码语言:javascript
复制
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.to_s,name.value...似乎什么都不起作用。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-10-07 09:35:13

是。这里有一个来自工厂女孩的Getting Started doc的例子

代码语言:javascript
复制
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中单独定义我的序列

代码语言:javascript
复制
FactoryGirl.define do
  sequence(:random_string) { |s| ('a'..'z').to_a.shuffle[0, 30].join }
end

您可能会从这样做中受益。然后你可以做一些类似这样的事情:

代码语言:javascript
复制
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
票数 20
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12765252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档