我可以想象,只要像我这样的懒人可以通过一个rake(终端)命令将任何假数据填充到db,就可以非常容易。Ruby on Rails:非常快速地填充假数据
我知道Faker,Populator和其他人,但据我所见,他们都需要编写一些(原始的但是)代码来使数据更人性化(直接和手动定义随机数据类型:emalis ,名称,价格等)。
这使得在大多数情况下意义,但现在我的情况下,将足以让我填与任何字符串MySQL的VARCHAR字段,与任何长文本的文本字段,INT - 与数字等
任何建议?
我可以想象,只要像我这样的懒人可以通过一个rake(终端)命令将任何假数据填充到db,就可以非常容易。Ruby on Rails:非常快速地填充假数据
我知道Faker,Populator和其他人,但据我所见,他们都需要编写一些(原始的但是)代码来使数据更人性化(直接和手动定义随机数据类型:emalis ,名称,价格等)。
这使得在大多数情况下意义,但现在我的情况下,将足以让我填与任何字符串MySQL的VARCHAR字段,与任何长文本的文本字段,INT - 与数字等
任何建议?
一些示例代码,演示了如何做到这一点:
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
你可以把耙任务。
如果速度是你的目标,你应该做两件事情:
可以有好看的数据=)但在我目前的情况下,我有一个超过50个字段的表,并且对于他们每个人,我必须制作一个像'Faker :: Name.name =>'Boring只要有一个命令(如果必要的库存在适当的方法存在)就可以完成(我希望)可以接受的字母“''''当有可以接受的东西时''dsdssdfwefwerw' ...... – okliv
好吧,比增加速度。是否需要所有这些字段? – Vidya
适用于FactoryGirl的+1 - 不仅仅用于测试数据! – sevenseacat
=)就像我现在正在做的事情,而希望等待更优雅的解决方案=)...我会接受它,如果没有更有趣的东西会被发布。我正在使用Faker生成int,varchar和text数据,甚至更多 - 我试图添加一些魔法来填充最合适的数据,使用Faker根据字段名称和Faker方法名称相似度生成字段 – okliv
如果此答案被接受我会制作一个完整的红宝石宝石。 – NARKOZ