簡體   English   中英

Rails 3.2.13 + Faker + Devise + Rolify

[英]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 ,但是沒有運氣。

先感謝您。

我不鼓勵您使用填充寶石。 有以下三個原因:

  1. 不再維護Populator,上一次提交是在兩年前。 官方存儲庫仍然顯示“目前正在開發Rails 3支持。敬請期待。” 一個月前發布了Rails 4。
  2. 它沒有數據驗證。 您可以確保自己添加正確的數據值。 這可能最終變得非常混亂。
  3. 以編程方式使您能夠更好地控制自定義案例非常容易,因此可以使您成為更好的開發人員=)

您可以使用以下代碼添加用戶角色來構造數據庫填充器:

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語句(至少在我的系統上沒有必要)
  • 將密碼移入一個區塊
  • 在保存用戶之前使用功能而非分配(=)添加角色-無法使用填充器

使用此構造,您可以使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM