Reset the database (purge all), then seed a database
Solution 1
I use rake db:reset
which drops and then recreates the database and includes your seeds.rb file.
http://guides.rubyonrails.org/migrations.html#resetting-the-database
Solution 2
You can delete everything and recreate database + seeds with both:
-
rake db:reset
: loads from schema.rb -
rake db:drop db:create db:migrate db:seed
: loads from migrations
Make sure you have no connections to db (rails server, sql client..) or the db won't drop.
schema.rb is a snapshot of the current state of your database generated by:
rake db:schema:dump
Solution 3
As of Rails 5, the rake
commandline tool has been aliased as rails
so now
rails db:reset
instead of rake db:reset
will work just as well
Solution 4
If you don't feel like dropping and recreating the whole shebang just to reload your data, you could use MyModel.destroy_all
(or delete_all
) in the seed.db file to clean out a table before your MyModel.create!(...)
statements load the data. Then, you can redo the db:seed
operation over and over. (Obviously, this only affects the tables you've loaded data into, not the rest of them.)
There's a "dirty hack" at https://stackoverflow.com/a/14957893/4553442 to add a "de-seeding" operation similar to migrating up and down...
Solution 5
on Rails 6 you can now do something like
rake db:seed:replant
This Truncates tables of each database for current environment and loads the seeds
https://blog.saeloun.com/2019/09/30/rails-6-adds-db-seed-replant-task-and-db-truncate_all.html
$ rails db:seed:replant --trace
** Invoke db:seed:replant (first_time)
** Invoke db:load_config (first_time)
** Invoke environment (first_time)
** Execute environment
** Execute db:load_config
** Invoke db:truncate_all (first_time)
** Invoke db:load_config
** Invoke db:check_protected_environments (first_time)
** Invoke db:load_config
** Execute db:check_protected_environments
** Execute db:truncate_all
** Invoke db:seed (first_time)
** Invoke db:load_config
** Execute db:seed
** Invoke db:abort_if_pending_migrations (first_time)
** Invoke db:load_config
** Execute db:abort_if_pending_migrations
** Execute db:seed:replant
Related videos on Youtube
Comments
-
Blankman about 2 years
Is there a rake command to wipe out the data in the database tables?
How do I create a db:seed script to pre-fill data to my tables?
-
etusm over 9 yearsSide note to this: if in Production, you might have to restart the rails server for changes to appear/pages to update.
-
m02ph3u5 about 7 yearsclever, recreating everything from scratch everytime took to long for me
-
aardvarkk over 6 yearsThanks for reminding people to turn off any servers to make sure the DB gets dropped properly.
-
Sami Birnbaum over 3 yearsGreat solution - far more simple and less intrusive then having to drop the whole db!
-
MZaragoza over 3 yearsI am glad that this was able to help. I think this is the way that it should be done in 2020, but again this original question was asked in 2010
-
Sami Birnbaum over 3 yearsGiven it's a Rails 6 feature - it would appear the rails devs agree with you 😎