首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Faker在factory_girl中使用时会产生重复数据

Faker在factory_girl中使用时会产生重复数据
EN

Stack Overflow用户
提问于 2011-03-19 02:37:36
回答 3查看 16.8K关注 0票数 86

我正在尝试使用Faker gem将一些假数据填充到工厂中:

代码语言:javascript
复制
Factory.define :user do |user|
  user.first_name Faker::Name::first_name
  user.last_name Faker::Name::last_name
  user.sequence(:email) {|n| "user#{n}@blow.com" }
end

然而,虽然我希望这会产生具有不同first_name和last_names的用户,但每个用户都是相同的:

代码语言:javascript
复制
>> Factory(:user)
=> #<User id: 16, email: "user7@blow.com", created_at: "2011-03-18 18:29:33",     
updated_at: "2011-03-18 18:29:33", first_name: "Bailey", last_name: "Durgan">
>> Factory(:user)
=> #<User id: 17, email: "user8@blow.com", created_at: "2011-03-18 18:29:39", 
updated_at: "2011-03-18 18:29:39", first_name: "Bailey", last_name: "Durgan">

如何让Faker gem为每个用户生成新名称,而不只是重用原来的名称?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-19 02:46:40

代码语言:javascript
复制
Factory.define :user do |user|
  user.first_name { Faker::Name::first_name }
  user.last_name { Faker::Name::last_name }
  user.sequence(:email) {|n| "user#{n}@blow.com" }
end

试着在伪造者周围放上括号。请参阅this link

票数 156
EN

Stack Overflow用户

发布于 2014-07-03 06:54:30

请注意,由于可用的假数据数量有限,Faker可能仍在提供重复数据。

为了进行简单的测试并通过唯一性验证,我使用了以下代码:

代码语言:javascript
复制
sequence(:first_name) {|n| Faker::Name::first_name + " (#{n})"}
sequence(:last_name) {|n| Faker::Name::last_name + " (#{n})"}
票数 46
EN

Stack Overflow用户

发布于 2015-11-07 05:26:36

在对属性进行唯一性验证时,使用序列的另一种(效率较低的)替代方法是检查建议的值是否已经存在,并不断尝试新的值,直到它是唯一的:

代码语言:javascript
复制
FactoryGirl.define do
  factory :company do
    name do
      loop do
        possible_name = Faker::Company.name
        break possible_name unless Company.exists?(name: possible_name)
      end
    end
  end
end
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5356387

复制
相关文章

相似问题

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