首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 3.2.13 + Faker + Devise + Rolify

Rails 3.2.13 + Faker + Devise + Rolify
EN

Stack Overflow用户
提问于 2013-07-04 08:34:41
回答 1查看 975关注 0票数 1

我正在构建一个测试应用程序,在使用Faker gem时遇到了一个问题:

我已经使用Devise创建了使用模型,并使用Rolify gem来创建角色,然后将使用CanCan来限制用户的使用权限。

所以,我用Faker为我的rake任务创建了一个文件:

代码语言:javascript
复制
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,但是没有成功。

提前谢谢你。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-10 01:13:12

我不鼓励你使用populator gem。这有三个原因:

不再维护

  1. Populator,上次提交是在两年前。official repository仍然说:“目前对Rails3的支持正在进行中,敬请期待。”对于一个多月前发布的Rails4,
  2. 没有数据验证。这取决于您是否添加了正确的数据值。这可能最终会变得非常混乱。
  3. 很容易通过编程让您更好地控制自定义用例,从而使您成为更好的开发人员=)

你可以通过添加用户角色来构建你的数据库填充器,代码如下:

代码语言:javascript
复制
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)

  • moved password into a
  • 在保存用户之前使用函数,而不是分配(=)添加角色-不能使用populator

使用此构造,您可以使用User实例做更多方便的事情。在使用Devise时防止发送确认电子邮件:可以在保存之前调用user.skip_confirmation!进行确认-您可能会发现有用的东西。

也可以考虑基于first_name和last_name生成电子邮件,在此之前已经由Faker生成,以使用户名和电子邮件内联。要实现这一点,您可以替换

代码语言:javascript
复制
Faker::Internet.email

通过

代码语言:javascript
复制
"#{user.first_name}.#{user.last_name}#{n+1}@example.com"

利用区块分子,从而创建唯一的电子邮件。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17460207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档