Faker gem 和 seeds.rb

Faker gem with seeds.rb

我想重构我的 seeds.rb 文件。因此,我严重依赖 gem faker 来填充数据。

首先我生成用户,像这样:

# --== Generate Sample Users
  user_list = [
    [ "Name", "Lastname", "Password", 't', "email@something.tld", "Password"],
    [ "Mortimer", "Snerd", "Secret", 'f', "mortimer@snerd.net", "Secret"]
    5.times.do
      name = Faker::Name.first_name
      surname = Faker::Name.last_name
      password = Faker::Internet.password(10)
      [ name, surname, 'f', Faker::Internet.email(name + "." + surname), 'f', password, password]
    end
  ]
    user_list.each do |name, surname, admin, email, password, password|
      User.create( name:name, surname:surname, admin:admin,  email:email, password:password, password_confirmation:password )
    end

但是,我遇到语法错误:unexpected tINTEGER, expecting ']' 5.times.do

我做错了什么?

首先,5.times.do 不是有效语法。 5.times return 是一个 Enumerable 对象,但 do 不是一个方法。我想你的意思是在这里使用 do 作为一个块。

此外,将块传递给 times 并不是 return 数组,它只是 return 从块中 return 编辑的最后一项,所以你实际上并没有修改您的 user_list 数组

user_list = [
  [ "Name", "Surname", "Password", 't', "email@example.com", "Password"],
  [ "Mortimer", "Snerd", "Secret", 'f', "mortimer@snerd.net", "Secret"]
]

5.times.do
  name = Faker::Name.first_name
  surname = Faker::Name.last_name
  password = Faker::Internet.password(10)

  # Add user to user_list
  user_list << [ name, surname, 'f', Faker::Internet.email(name + "." + surname), 'f', password, password]
end

user_list.each do |name, surname, admin, email, password, password_confirmation|
  User.create(name: name, surname: surname, admin: admin,  email: email, password: password, password_confirmation: password_confirmation )
end

最后,您可能希望放弃使用 Faker 发送电子邮件并使用 find_or_create 而不是 create 以防止在用户已经存在并使用给定电子邮件的情况下创建。你的 seeds.rb 真的应该是幂等的(运行 它不止一次应该没有副作用)。