0

我想用许多商店和用户填充数据库,每个用户对应一个商店。下面代码的问题是我收到错误验证失败:电子邮件已被占用。

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
4

1 回答 1

1

问题是您在调用之前设置了 email 变量stores.each,因此所有 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依此类推。

于 2013-04-29T09:53:01.543 回答