簡體   English   中英

如何在Rails seeds.rb中清除整個數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM