Seeds: populando seu banco de dados

Artigos - 21/Mai/2020 - por André Kanamura

Introdução

O framework Ruby on Rails possui os arquivos seeds para criar valores iniciais no banco de dados depois que ele é criado. Normalmente usamos seeds para popular o banco com dados que são importantes para a aplicação funcionar em qualquer ambiente. Por exemplo, numa aplicação para uma empresa de aluguel de carros, talvez seja importante que estejam cadastrados previamente os maiores fabricantes de veículos, mesmo que depois esses dados sejam modificados. Também pode ser interessante que estejam criadas algumas contas administrativas de usuários.

Naturalmente, o seeds vai variar bastante dependendo da natureza da sua aplicação e deve conter todos os dados convenientes para as pessoas que estiverem trabalhando no projeto. Assim, quando o comando rails server for utilizado para investigar como a aplicação está rodando, teremos como verificar o uso de forma adequada.

Os comandos db

Para fazer isso, precisamos configurar o db/seeds.rb com os dados que você quer criar e rodar o comando rails db:seed no Terminal. Se você estiver usando uma versão anterior a do Rails 5, o comando deve ser rake db:seed. Temos basicamente três comandos para o seeds:

$ rails db:seed
# Carrega os valores do db/seeds.rb.

$ rails db:setup
# Cria  o banco de dados, carrega o schema e inicializa os dados seed.

$ rails db:reset
# Faz o mesmo que db:setup, mas derruba o bancos antes.

Assim, você poderia usar rails db:seed sempre que quisesse popular o banco, mas provavelmente na maioria das vezes será necessário rodar um dos outros comandos. Caso você faça alguma alteração no db/seeds.rb, por exemplo, será necessário usar db:reset para derrubar o banco antes de criá-lo e populá-lo novamente. Alternativamente, você pode rodar rails db:drop db:create db:migrate e em seguida rodar rails db:seed. O resultado deve ser o mesmo.

Como gerar os dados

Para configurar o db/seeds.rb, você pode utilizar código Ruby semelhante ao que usamos para fazer nossos testes ao criar dados previamente existentes em banco, por exemplo:

User.create!(email: 'user@email.com', password: '123456', role: :admin)
User.create!(email: 'user@email.com', password: '123456', role: :user)

Como mostrado no exemplo do Rails Guides, você pode se aproveitar do fato do seeds rodar como qualquer código Ruby para facilitar seu trabalho:

5.times do |i|
  Product.create!(name: "Product ##{i}", description: "A product.")
end

Atenção: para o seu banco de dados de produção, não é recomendado usar gems como Faker ou FactoryBot. No entanto, para os ambientes de desenvolvimento ou de testes, pode ser interessante usar essas gems para simplificar a configuração ou adicionar variedade aos dados. Você pode ver um exemplo de configuração de seeds usando factories neste tutorial: Priming the pump.

Vale lembrar que, como qualquer código da sua aplicação, clareza e legibilidade são importantes e seu arquivo de seeds será essencial para o seu time.

Referências

Foto de perfil do autor
André Kanamura

Dev na Campus Code