1

我可以想象,对于像我这样的懒人来说,只需一个 rake(终端)命令就可以很容易地将任何假数据填充到 db 中。

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

在大多数情况下这是有道理的,但现在对我来说,用任何字符串填充 mysql varchar 字段、用任何长文本填充文本字段、int - 用数字等等就足够了

有什么建议么?

4

2 回答 2

1

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

  • 在进行验收测试之前,请使用内存数据库进行测试。换句话说,为您的集成测试(有些人可能会说单元测试)考虑SQLite 之类的东西,而不是 MySQL。
  • 使用Factory Girl生成您的虚假数据。显然,由这样的工具创建的数据比你喜欢的更有意义,但我很奇怪你关心这个。无论如何,使用现有工具比仅仅因为您不想要看起来“太好”的数据而编写生成乱码的代码要快得多。
于 2013-11-29T00:43:11.253 回答
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

你可以把它放到 rake 任务中。

于 2013-11-29T01:26:57.413 回答