私はこのテストデータベースを持っていますが、これは今のところジャンクが詰め込まれています。今、私はRailsコンソールでいくつかのTable.destroy_allコマンドを実行しました。これはすべてのレコードと依存関係を削除するものです。しかし、IDなどが始まるようにすべてを切り捨てたいですもう一度1。Rails 3?
受け入れられた答えは、データベース全体を再作成する必要がある場合にのみ機能します。
1つのテーブルを(コールバックを使用して)ドロップし、IDを取得して1から開始するには:
Model.destroy_all # Only necessary if you want to trigger callbacks.
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name} RESTART IDENTITY")
Sqliteを使用している場合、切り捨てはサポートされていないため、以下を実行します。
Model.destroy_all # Only necessary if you want to trigger callbacks.
ActiveRecord::Base.connection.execute("Delete from #{table_name}")
ActiveRecord::Base.connection.execute("DELETE FROM SQLITE_SEQUENCE WHERE name='#{table_name}'")
これは私のために働いた-ActiveRecord::Base.connection.execute("TRUNCATE table_name")
Model.connection.truncate(Model.table_name)
rake db:rollback STEP=3 Rails_ENV=test
3は、db/migrateにある移行の数を表します。例:私が持っている場合
db/migrate
20140121065542_create_users.rb
20140121065710_create_profiles.rb
20140121065757_create_articles.rb
20140121065900_create_comments.rb
20140121065929_create_categories.rb
したがって、削除する移行は合計5つあります。私が行った場合 rake db:rollback STEP=5 Rails_ENV=test
すべてのテーブルがTESTデータベースから削除され、Rails_ENV = testを削除すると、すべてのENVIRONNMENT(プロダクション、テスト、開発)テーブルが削除され、db/shema.rbファイルも移行データから削除されます。
次回のテスト実行時にデータベースを再構築するだけです(ドロップすると、自動的に再構築されます)。
rake db:drop Rails_ENV=test
rake db:reset
はrake db:drop db:setup
を実行します。つまり、データベースを削除し、データベースを再度セットアップします。
SQlite3(TRUNCATE
をサポートしていない)ではなくMySQLまたはPostgreを使用していると仮定すると、次のことができます。
MyModel.connection_pool.with_connection { |c| c.truncate(MyModel.table_name) }
これはActiveRecordコールバックを呼び出さないことに注意してください。