[英]how to clear whole database in Rails seeds.rb
完成此任務的最佳方法是什么? 至於現在,我正在使用:
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
非常感謝您的幫助!
首先,我認為混合這樣的問題並不是一個好主意。 seeds.rb
文件旨在使數據為數據庫設定種子,而不是重置數據。 已經有一個rake任務重置數據庫( rake db:migrate:reset
),它只運行rake db:drop db:create db:migrate
。 如果您想要為新數據庫設定種子,可以運行rake db:reset db:seed
。
我絕對同意@ 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
您可以嘗試Rake::Task["db:reset"]
調用。
rake db:reset只是一個rake任務,你可以調用它來重置數據庫,使用Rake :: Task讓你從腳本中調用它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.