是否有rake命令来清除数据库表中的数据?
如何创建db:seed脚本以将数据预先填充到我的表中?
答案 0 :(得分:273)
我使用rake db:reset
删除然后重新创建数据库并包含seeds.rb文件。
http://guides.rubyonrails.org/migrations.html#resetting-the-database
答案 1 :(得分:157)
您可以删除所有内容并使用以下两者重新创建数据库+种子:
rake db:reset
:从schema.rb rake db:drop db:create db:migrate db:seed
:从迁移加载确保没有与db(rails server,sql client ..)的连接,否则db不会丢弃。
schema.rb是由以下内容生成的数据库当前状态的快照:
rake db:schema:dump
答案 2 :(得分:6)
如果您不想放弃并重新创建整个shebang只是为了重新加载数据,您可以在seed.db文件中使用MyModel.destroy_all
(或delete_all
)来清除在MyModel.create!(...)
语句加载数据之前的表。然后,您可以一遍又一遍地重做db:seed
操作。 (显然,这只会影响您加载数据的表格,而不会影响其他表格。)
有一个"肮脏的黑客"在https://stackoverflow.com/a/14957893/4553442添加" de-seeding"操作类似于上下移动......
答案 3 :(得分:3)
从Rails 5开始,rake
命令行工具已被别名为rails
,所以现在
rails db:reset
代替rake db:reset
也可以正常工作
答案 4 :(得分:2)
在Rails 6上,您现在可以执行类似的操作
rake db:seed:replant
这会针对当前环境截断每个数据库的表并加载种子
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
答案 5 :(得分:0)
如果要删除本地数据库并使用从rake db:reset
加载的数据重新开始,可以使用db/seeds.rb
。当您仍在计算模式时,这是一个有用的命令,并且通常需要向现有模型添加字段。
使用reset命令后,它将执行以下操作:
删除数据库:rake db:drop
加载架构:rake db:schema:load
为数据设定种子:rake db:seed
但是如果您想完全删除数据库,可以使用rake db:drop
。删除数据库还将删除任何架构冲突或错误数据。如果要保留所拥有的数据,请务必在运行此命令之前对其进行备份。
这是一篇关于最重要的rake database commands的详细文章。