FactoryGirl + Faker-为db种子数据中的每个对象生成相同的数据

60位

我正在使用FactoryGirl和Faker在我的seeds.rb文件中生成用户对象,但是由于某些原因,正在创建完全相同的用户,并且rake db:seed由于电子邮件的唯一性验证而失败。

用户工厂:

#users.rb
require 'faker'

FactoryGirl.define do
  factory :user do
    first_name            Faker::Name.first_name
    last_name             Faker::Name.last_name
    phone                 Faker::PhoneNumber.cell_phone
    email                 Faker::Internet.email
    password              "password"
    password_confirmation "password"
  end
end

seeds.rb文件中的代码

#seeds.rb
rand(5..11).times { FactoryGirl.create(:user) }

错误:

ActiveRecord::RecordInvalid: Validation failed: Email has already been taken

如果我打开控制台并使用它FactoryGirl.create(:user),将会得到相同的结果...即使我只运行了Faker::Internet.email几次,也会一次又一次创建相同的对象,但我会收到几封电子邮件。

工厂女工:

[1] pry(main)> FactoryGirl.create(:user)
...
=> #<User id: 3, first_name: "Osvaldo", last_name: "Wunsch", email: "[email protected]", phone: "(912)530-4949 x64848", created_at: "2014-07-31 20:57:27", updated_at: "2014-07-31 20:57:27", encrypted_password: "$2a$10$mxWC7yLYR0m/Sw8MO6Lyru.xuTHCdCEuM9Orx3LXGApF...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 0, current_sign_in_at: nil, last_sign_in_at: nil, current_sign_in_ip: nil, last_sign_in_ip: nil>
[2] pry(main)> FactoryGirl.create(:user)
...
ActiveRecord::RecordInvalid: Validation failed: Email has already been taken

贝克本身:

[3] pry(main)> Faker::Internet.email
=> "[email protected]"
[4] pry(main)> Faker::Internet.email
=> "[email protected]"

我在这里想念什么?为什么Faker每次通过FactoryGirl使用时都会产生相同的数据?

史蒂夫·图钦

如果要为创建的每个实例重新评估值,则需要传递一个块。

代替

email   Faker::Internet.email

尝试...

email   { Faker::Internet.email }

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章