我正在构建一个测试应用程序,在使用Faker gem时遇到了一个问题:
我已经使用Devise创建了使用模型,并使用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这段代码工作正常,当我查看我的users_roles表时,它创建了198个虚拟users...but -什么都没有,用户没有分配给他们角色。我一直试图弄清楚如何通过Faker为用户分配角色,但没有成功。
我试着添加了user.role_id = User.add_role :user,但是没有成功。
提前谢谢你。
发布于 2013-08-10 01:13:12
我不鼓励你使用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请注意,因为我:
填充程序删除了require语句(至少在我的系统上不是necessary)
使用此构造,您可以使用User实例做更多方便的事情。在使用Devise时防止发送确认电子邮件:可以在保存之前调用user.skip_confirmation!进行确认-您可能会发现有用的东西。
也可以考虑基于first_name和last_name生成电子邮件,在此之前已经由Faker生成,以使用户名和电子邮件内联。要实现这一点,您可以替换
Faker::Internet.email通过
"#{user.first_name}.#{user.last_name}#{n+1}@example.com"利用区块分子,从而创建唯一的电子邮件。
https://stackoverflow.com/questions/17460207
复制相似问题