2013-11-29 53 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

相關問題