[英]Rails 3.2.13 + Faker + Devise + Rolify
我正在構建測試應用程序,遇到了Faker gem的問題:
我已經使用Devise創建了Use模型,並使用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
,但是沒有運氣。
先感謝您。
我不鼓勵您使用填充寶石。 有以下三個原因:
您可以使用以下代碼添加用戶角色來構造數據庫填充器:
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實例(例如ex)做一些更方便的事情。 防止在通過調用user.skip_confirmation!
使用Devise的:confirmable時發送確認電子郵件user.skip_confirmation!
保存之前-您可能會發現有用的東西。
還要考慮基於Faker已經生成的first_name和last_name生成電子郵件,以內聯用戶名和電子郵件。 為此,您可以更換
Faker::Internet.email
通過
"#{user.first_name}.#{user.last_name}#{n+1}@example.com"
利用塊分子,從而創建唯一的電子郵件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.