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
真的应该是幂等的(运行 它不止一次应该没有副作用)。
我想重构我的 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
真的应该是幂等的(运行 它不止一次应该没有副作用)。