我正在使用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: "willy@damore.net", 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
=> "hobart_purdy@goodwinmills.org"
[4] pry(main)> Faker::Internet.email
=> "pierce_brekke@gislasonrolfson.net"

我错过了什么?为什么Faker每次通过FactoryGirl使用时都会产生相同的数据?

推荐答案

如果希望为创建的每个实例重新计算值,则需要传递一个块.

而不是

email   Faker::Internet.email

try

email   { Faker::Internet.email }

Ruby-on-rails相关问答推荐

无法安装Ruby错误运行';__rvm_make-J4';,

Ruby - 如何删除目录中早于 X 天的所有文件?

rails turbo frame 显然在更新,但浏览器窗口保持不变

select2 未应用于所有下拉列表;它只适用于数据的最后一条记录

如何不需要rails/all?

从 rails 5 升级到 6 和 zeitwerk

Rails 7 共享刺激控制器功能

Ruby 3 动态关键字参数

在bash中匹配带有空格字符的字符串

Rails - Comment.count没有改变1

Rails:如何访问 RESTful 助手?

如何使用失败try 次数使设计可锁定

没有要加载的文件 - readline

Rails 4 查找没有子元素的父母

可以在 Rails/ActiveRecord 中使用 NULL 指定唯一索引吗?

Rails Activeadmin - 自定义关联 Select 框

如何在每个操作的基础上禁用 Ruby on Rails 的日志(log)记录?

将新管理员添加到活动管理员

Rails:为什么 with_exclusive_scope 受保护?关于如何使用它的任何好的做法?

ruby on rails 如何处理 NaN