实现这一目标的最佳方法是什么?至于现在我正在使用:
Role.delete_all
User.delete_all
...
但如何清除habtm talbes?喜欢roles_users
我认为ream88的回答最准确地回答了我的问题,但可能是bestidea遵循coreyward建议使用单独的rake任务并将seeds.rb留给播种数据。
这是来自ream88的更新答案,它不会删除schema_migrations
表。
ActiveRecord::Base.establish_connection
ActiveRecord::Base.connection.tables.each do |table|
# MySQL
ActiveRecord::Base.connection.execute("TRUNCATE #{table}") unless table == "schema_migrations"
# SQLite
# ActiveRecord::Base.connection.execute("DELETE FROM #{table}") unless table == "schema_migrations"
end
非常感谢您的帮助!
答案 0 :(得分:42)
首先,我认为混合这样的问题并不是一个好主意。 seeds.rb
文件旨在使数据为数据库设定种子,而不是重置数据。已经有一个rake任务,用于重置只运行rake db:migrate:reset
的数据库(rake db:drop db:create db:migrate
)。如果您想要为新数据库设定种子,可以运行rake db:reset db:seed
。
答案 1 :(得分:16)
我绝对同意@ coreyward的回答,但是如果你真的要清除seeds.rb
文件中的所有表格,那么这个代码片段就可以完成这个工作:
ActiveRecord::Base.establish_connection
ActiveRecord::Base.connection.tables.each do |table|
next if table == 'schema_migrations'
# MySQL and PostgreSQL
ActiveRecord::Base.connection.execute("TRUNCATE #{table}")
# SQLite
# ActiveRecord::Base.connection.execute("DELETE FROM #{table}")
end
答案 2 :(得分:4)
您可以尝试Rake::Task["db:reset"]
调用。
rake db:reset只是一个rake任务,你可以调用它来重置数据库,使用Rake :: Task让你从脚本中调用它。