【问题标题】:Populating database with faker用 faker 填充数据库
【发布时间】:2013-04-29 18:07:25
【问题描述】:

我想用许多商店和用户填充数据库,每个用户对应一个商店。下面代码的问题是我收到错误 Validation failed: Email has been taken.

namespace :db do
  desc "Fill database with sample data"
  task populate: :environment do
    make_stores
    make_users
  end
end

def make_stores
  50.times do 
    name = Faker::Company.name
    manager = Faker::Name.name
    address = Faker::Address.street_name
    Store.create!(name: name,
                  manager: manager,
                  address: address)
  end
end

def make_users
  stores = Store.all(limit: 8)

  99.times do |n|
    first_name  = Faker::Name.first_name
    last_name = Faker::Name.last_name
    email = "example-#{n+1}@example.org" 
    password  = "password"
    stores.each { |store| store.users.create!(first_name: first_name,
                  last_name: last_name,
                 email:    email,
                 password: password,
                 password_confirmation: password) }
  end
end

【问题讨论】:

  • 您在第一次运行代码时或以后运行代码时遇到了该错误?
  • 不,我第一次得到错误时 rake db:reset,但是当我填充它时,我得到了同样的错误
  • 删除所有用户并重试。
  • @SoniKishan 我通过重置数据库做到了。问题似乎是循环无法正常工作。

标签: ruby-on-rails faker


【解决方案1】:

问题是您在调用 stores.each 之前设置了 email 变量,因此所有 8 家商店都会收到一个使用相同电子邮件的用户。

改为这样做:

def make_users
  stores = Store.all(limit: 8)

  99.times do |n|
    password  = "password"
    stores.each do |store|
      first_name  = Faker::Name.first_name
      last_name = Faker::Name.last_name
      email = "#{store.name.parameterize}-#{n+1}@example.org" 
      store.users.create!(first_name: first_name,
                  last_name: last_name,
                  email:    email,
                  password: password,
                  password_confirmation: password)
    end
  end
end

现在前 8 位用户将收到(some-store-name)-1@example.org 之类的电子邮件,接下来的 8 位用户将收到 (some-store-name)-2@example.org 等。

【讨论】:

  • 愿阿斯加德诸神与你同在,我的朋友。
  • 愿奥丁在战斗中保护你。
猜你喜欢
  • 1970-01-01
  • 2021-06-30
  • 2021-02-17
  • 2013-09-19
  • 2016-03-31
  • 2020-11-16
  • 1970-01-01
  • 2014-02-14
  • 2015-01-27
相关资源
最近更新 更多