1

私のような怠惰な人にとって、1 つの rake (端末) コマンドだけで偽のデータを db に入力するのは非常に簡単であると想像できます。

私はFaker、Populatorなどについて知っていますが、私が見る限り、それらはすべて、データをより人間に優しいものにするためにいくつかの(原始的ですが)コードを書く必要があります(ランダムデータのタイプを直接および手動で定義します:emalis、名前、価格等々)。

ほとんどの場合、それは理にかなっていますが、私の場合、mysql varchar フィールドに任意の文字列、テキスト フィールドに長いテキスト、int - 数字などを入力するだけで十分です。

助言がありますか?

4

2 に答える 2

1

速度が目的の場合は、次の 2 つのことを行う必要があります。

  • 受け入れテストに到達するまで、テストにはメモリ内データベースを使用します。言い換えれば、MySQL ではなく、統合テスト (単体テストと言う人もいるかもしれません) にはSQLiteのようなものを検討してください。
  • 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 に答える