Posts Tagged ‘populator’

Populando banco de dados usando a gem Populator

June 13th, 2009

É preciso demonstrar uma funcionalidade da aplicação para o cliente, mas para isso é necessário realizar diversos cadastros e gerar informações na base de dados. Dependendo da quantidade de registros, fazer isso manualmente acaba ficando muito chato além de consumir um longo tempo.

Procurando uma maneira de automatizar esse processo, encontrei a gem Populator que facilita e muito esse trabalho.

Como Usar:

Primeiro instale a gem

sudo gem install populator

Após instalar, no console já podemos fazer algo como:

>> require 'populator'
=> []
>> Category.count
=> 0
>> Category.populate(10) { |category| category.name = Populator.words(1..3).titleize }
=> {}
>> Category.count
=> 10
>> Category.first
=> #<Category id: 1, name: "Fuga Debitis Temporibus", created_at: "2009-06-13 14:17:24", updated_at: "2009-06-13 14:17:24">
>>

Existem alguns metodos que podemos usar para gerar alguns dados como:

Populator.words(5) # gera 5 palavras aleatoriamente e insere um espaço entre elas
Populator.words(1..3) # gera entre uma e três palavras aleatoriamente
Populator.sentences(3) # gera 3 frases
Populator.paragraphs(2) # gera 2 paragrafos

Mas dependendo to tamanho de nosso model, ficar digitando tudo isso pelo console acaba dando muito trabalho também. Vamos melhorar isso!

Crie um novo arquivo em lib/tasks/populate.rake e crie a seguinte tarefa:

namespace :db do
  desc "Popula base de dados"
  task :populate => :environment do
 
    require 'populator'
 
    Category.populate 30 do |category|
      category.name = Populator.words(1..3).titleize
    end
 
  end
end

Agora dentro do diretório da aplicação, basta rodar a tarefa:

 rake db:populate 

Bem melhor :)

Podemos melhorar ainda mais este processo e deixar ele mais completo utilizando a gem Faker que gera dados como nome, telefone, endereço, e-mail e pode ser usada junto com a Populator.

Vale a pena assistir a este Railscast onde é demonstrado como utilizar as duas gems.

É isso ai! :D