web-dev-qa-db-ja.com

Rails consoleでテーブルを切り捨てます

私はこのテストデータベースを持っていますが、これは今のところジャンクが詰め込まれています。今、私はRailsコンソールでいくつかのTable.destroy_allコマンドを実行しました。これはすべてのレコードと依存関係を削除するものです。しかし、IDなどが始まるようにすべてを切り捨てたいですもう一度1。Rails 3?

39
CaptainCarl

受け入れられた答えは、データベース全体を再作成する必要がある場合にのみ機能します。
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}'")
130

これは私のために働いた-ActiveRecord::Base.connection.execute("TRUNCATE table_name")

12
Mr.Quack
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

2
Yam Marcovic

rake db:resetrake db:drop db:setupを実行します。つまり、データベースを削除し、データベースを再度セットアップします。

ソース

1
Eva

SQlite3(TRUNCATEをサポートしていない)ではなくMySQLまたはPostgreを使用していると仮定すると、次のことができます。

MyModel.connection_pool.with_connection { |c| c.truncate(MyModel.table_name) }

これはActiveRecordコールバックを呼び出さないことに注意してください。

1
jsears