2013-11-29 34 views
0

我可以想象,只要像我这样的懒人可以通过一个rake(终端)命令将任何假数据填充到db,就可以非常容易。Ruby on Rails:非常快速地填充假数据

我知道Faker,Populator和其他人,但据我所见,他们都需要编写一些(原始的但是)代码来使数据更人性化(直接和手动定义随机数据类型:emalis ,名称,价格等)。

这使得在大多数情况下意义,但现在我的情况下,将足以让我填与任何字符串MySQL的VARCHAR字段,与任何长文本的文本字段,INT - 与数字等

任何建议?

回答

0

一些示例代码,演示了如何做到这一点:

SKIP_COLUMNS = %w(id created_at updated_at) 
RECORDS_COUNT = 10 

# random data to fill 
int = rand(1..100) 
varchar = 'lorem' 
text = 'big lorem' 

# get models 
@models = ActiveRecord::Base.connection.tables.collect {|t| t.underscore.singularize.camelize } 
@models.select {|m| m.constantize rescue @models.delete(m) } 

# fill in data 
@models.map(&:constantize).each do |model| 
    model.columns_hash.each do |column| 
    next if SKIP_COLUMNS.include?(column.first) 

    # column_name = column.first 
    # column_type = column.last.type 

    RECORDS_COUNT.times do 
     record = model.new 

     case column.last.type 
     when :integer 
     record.send("#{column.first}=", int) 
     when :string 
     record.send("#{column.first}=", varchar) 
     when :text 
     record.send("#{column.first}=", text) 
     end 

     record.save! 
    end 
    end 
end 

你可以把耙任务。

+0

=)就像我现在正在做的事情,而希望等待更优雅的解决方案=)...我会接受它,如果没有更有趣的东西会被发布。我正在使用Faker生成int,varchar和text数据,甚至更多 - 我试图添加一些魔法来填充最合适的数据,使用Faker根据字段名称和Faker方法名称相似度生成字段 – okliv

+0

如果此答案被接受我会制作一个完整的红宝石宝石。 – NARKOZ

1

如果速度是你的目标,你应该做两件事情:

  • ,直到你到验收测试使用的内存数据库为你的测试。换句话说,为你的集成测试(有些人可能会说单元测试)而不是MySQL考虑类似SQLite
  • 使用Factory Girl来生成您的假数据。显然,由这样的工具创建的数据比您想要的更有意义,但对于我来说,您关心这一点很奇怪。无论如何,使用现有工具的速度要快于编写会产生乱码的代码,因为您不希望数据看起来“太好”。
+0

可以有好看的数据=)但在我目前的情况下,我有一个超过50个字段的表,并且对于他们每个人,我必须制作一个像'Faker :: Name.name =>'Boring只要有一个命令(如果必要的库存在适当的方法存在)就可以完成(我希望)可以接受的字母“''''当有可以接受的东西时''dsdssdfwefwerw' ...... – okliv

+0

好吧,比增加速度。是否需要所有这些字段? – Vidya

+0

适用于FactoryGirl的+1 - 不仅仅用于测试数据! – sevenseacat

相关问题