如何使用 seeds.rb 中的随机值填充空属性

How to populate empty attributes with random values from seeds.rb

我已经生成 User 模型,其属性为:first_namelast_namecity。然后,我使用 seed.rb 和 gem 'faker' 创建了 200 个 class 实例。毕竟,我已经为这个模型添加了一个属性 - age:string,所以现在在 class 的每个实例中,年龄 = 'nil'。现在,我想用 10..99 范围内随机生成的数字填充每个用户。 这是我的代码 seed.rb:

users = User.all
users.each do |element|
    element.age = rand(10..99).to_s
end

当我键入 rake db:seed 时似乎成功了,但是当我检查数据库时,每个 age:string 仍然是 'nil'。你知道哪里出了问题吗?

您正在分配值,但没有保存它。您应该将代码更改为

users = User.all
users.each do |element|
  element.age = rand(10..99).to_s
  element.save!
end

或者只是

users = User.all
users.each do |user|
  user.update_attribute(:age, rand(10..99))
end

如果不需要校验记录,下面的就更快了

users = User.all
users.each do |user|
  user.update_column(:age, rand(10..99))
end

此外,您可以将 Faker 与 Fabrication 组合以获得更多 种子。

Faker::Name.name      #=> "Christophe Bartell"
Faker::Internet.email #=> "kirsten.greenholt@corkeryfisher.info"

您可以使用它从 db/seed.rb运行 rake db:seed 生成随机数据。

@Simone Carletti 的回答很好...也许您会受益于 find_each:

User.find_each do |user|
   user.update_attribute :age, rand(10..99)
end