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

时间:2015-12-31 10:52:51

标签: ruby-on-rails ruby ruby-on-rails-3 random

我已使用Userfirst_namelast_name生成city模型。然后,我使用seed.rb和gem'faker'创建了200个类的实例。毕竟,我在这个模型中添加了一个属性 - age:string,所以现在在类的每个实例中,age = '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'。你知道可能出了什么问题吗?

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

@Simone Carletti的答案很好......也许你会从find_each中受益:

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

答案 2 :(得分:-1)

此外,您可以将Faker与Fabrication结合使用以获取更多种子。

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

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