我正在构建一个测试应用程序并遇到了Faker gem的一个问题:
我已经使用Devise创建了Use model并使用了Rolify gem来创建角色,然后稍后将使用CanCan来限制用户的使用权限。
所以,有了Faker,我为我的rake任务创建了一个文件:
namespace :db do
desc "Fill dummy DB"
task :populate => :environment do
require "populator"
require "faker"
password = "password"
User.populate 198 do |user|
user.firstname = Faker::Name.first_name
user.lastname = Faker::Name.last_name
user.email = Faker::Internet.email
user.encrypted_password = User.new(:password => password).encrypted_password
user.phone = Faker::PhoneNumber.phone_number
user.address1 = Faker::Address.street_address
user.city = Faker::Address.city
user.state = Faker::Address.state_abbr
user.zip = Faker::Address.zip_code
user.latitude = Faker::Address.latitude
user.longitude = Faker::Address.longitude
end
end
end
此代码有效,它创建了198个虚拟用户......但是当我查看我的users_roles表时 - 没有任何内容,用户没有分配给他们的角色。我一直试图弄清楚如何通过Faker为用户分配角色,但没有运气。
我尝试添加user.role_id = User.add_role :user
,但没有运气。
提前谢谢。
答案 0 :(得分:1)
我不鼓励你使用populator gem。这有三个原因:
您可以使用以下代码添加用户角色来构建数据库填充程序:
namespace :db do
desc "Fill dummy DB"
task :populate => :environment do
198.times do |n|
user = User.new(
firstname: Faker::Name.first_name,
lastname: Faker::Name.last_name,
email: Faker::Internet.email,
password: "password",
phone: Faker::PhoneNumber.phone_number,
address1: Faker::Address.street_address,
city: Faker::Address.city,
state: Faker::Address.state_abbr,
zip: Faker::Address.zip_code,
latitude: Faker::Address.latitude,
longitude: Faker::Address.longitude )
user.add_role :user
user.save
end
end
end
请注意我:
使用此构造,您可以使用User实例制作更方便的东西,例如。阻止在使用Devise时发送确认电子邮件:在保存前通过调用user.skip_confirmation!
确认 - 您可能会觉得有用。
考虑生成基于faker之前已生成的first_name和last_name的电子邮件,然后将用户名和电子邮件内联。为此,您可以替换
Faker::Internet.email
通过
"#{user.first_name}.#{user.last_name}#{n+1}@example.com"
利用分组分子,从而创建一个独特的电子邮件。