我可以想象,对于像我这样的懒人来说,只需一个 rake(终端)命令就可以很容易地将任何假数据填充到 db 中。
我知道 Faker、Populator 和其他人,但据我所知,他们都需要编写一些(原始但)代码以使数据更人性化(直接和手动定义随机数据的类型:emalis、名称、价格等等)。
在大多数情况下这是有道理的,但现在对我来说,用任何字符串填充 mysql varchar 字段、用任何长文本填充文本字段、int - 用数字等等就足够了
有什么建议么?
我可以想象,对于像我这样的懒人来说,只需一个 rake(终端)命令就可以很容易地将任何假数据填充到 db 中。
我知道 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
你可以把它放到 rake 任务中。