diff --git a/rails/README.md b/rails/README.md index 65e33eaa..2f55bba7 100644 --- a/rails/README.md +++ b/rails/README.md @@ -79,7 +79,7 @@ Guidance on ActiveRecord, ActiveModel, and other model objects. suffixes. - Keep `db/schema.rb` or `db/development_structure.sql` under version control. - Use `db/seeds.rb` for data that is required in all environments. -- Use `dev:prime` rake task for development environment seed data. +- Use `development:db:seed` rake task for development environment seed data. [Example](/rails/how-to/seed-data.md). ## Migrations diff --git a/rails/how-to/seed-data.md b/rails/how-to/seed-data.md new file mode 100644 index 00000000..91470d81 --- /dev/null +++ b/rails/how-to/seed-data.md @@ -0,0 +1,45 @@ +# How to seed development data + +```ruby +# lib/development/seeder.rb + +require "factory_bot" + +module Development + class Seeder + include FactoryBot::Syntax::Methods + + def self.load_seeds + new.load_seeds + end + + def load_seeds + emails = %w[ralph@example.com ruby@example.com] + + emails.each do |email| + create(:user, email:, password: "password") unless User.exists?(email:) + end + end + end +end +``` + +```rb +# lib/tasks/development.rake + +abort "Seeds can only be loaded in local environments" unless Rails.env.local? + +namespace :development do + namespace :db do + desc "Loads seed data into development." + task seed: :environment do + Development::Seeder.load_seeds + end + + namespace :seed do + desc "Truncate tables of each database for development and loads seed data." + task replant: [ "environment", "db:truncate_all", "development:db:seed" ] + end + end +end +```