我可以想象,只要像我這樣的懶人可以通過一個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