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.