私はこのテスト用データベースを持っていますが、今はジャンクで詰まっています。今、私はいくつかのTable.destroy_allコマンドをレールコンソールで実行しました。これはすばらしいすべてのレコードと依存関係を削除します。しかしながら;私はIDの等が再び1で始まるようにすべてを切り捨てたいと思います。 Rails 3には何か方法がありますか?テーブルをレールコンソールで切り捨てます
答えて
受け入れ答えにのみ機能します。
Model.destroy_all # Only necessary if you want to trigger callbacks.
ActiveRecord::Base.connection.execute("TRUNCATE #{table_name} RESTART IDENTITY")
あなたはSQLiteにも使用している場合、それはそう、次の操作を行いTRUNCATEをサポートしていません:
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}'")
(コールバック付き)単一のテーブルをドロップすると、IDは1から開始するために取得する
次回のテスト実行時にデータベースを再構築するだけです(これは削除後に自動的に行われます)。あなたは、データベース全体を再作成する必要がある場合
rake db:drop RAILS_ENV=test
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:reset
は、rake db:drop db:setup
を実行します。つまり、データベースを削除し、データベースを再度設定します。コンソールでこれを行うために頼む
これを行うことで、重要なDATAを失うことになります。 –
(少し遅れてパーティーに、私が知っている)
:
2.1.2 :001 > Post.all.each do |post|
2.1.2 :002 > post.destroy!
2.1.2 :003 > end
にも作品
...
この本質的にすべてのポストをループして破棄します。
これは私のために働いた1. 'each'を使わず、' find_each'を使います。 1つのクエリで10億のレコードを取得しないようにします。 2. DBからレコードを削除するだけでコールバックを実行する必要がない場合は、ループを使用しないでください。 'Post.delete_all'を実行してください – Kukunin
>>> はActiveRecord ::ベース(私はRailsの4を使用していますが)これは、しかし...
同じロジックが同様のRails 3のために働く必要がありますあなたの自動インクリメント値を変更しません。これはということ
MyModel.connection_pool.with_connection { |c| c.truncate(MyModel.table_name) }
注:connection.execute( "TRUNCATE table_nameの")
あなたはMySQLやPostgreなくsqlite3のを(TRUNCATE
をサポートしていない)を使用していると仮定すると、あなたは次のことを行うことができますActiveRecを呼び出さないordコールバック。
- 1. テーブル2でテーブル2を切り捨て、テーブル2を切り捨てます
- 2. トランザクション内でテーブルを切り捨てる
- 3. Laravel 5のテーブルを切り捨てる
- 4. テーブルを切り捨てる権限
- 5. SAS LASRテーブルの切り捨て
- 6. Slick 3テスト用の切り捨てテーブル
- 7. ストリーミング前のBigQueryテーブルの切り捨て
- 8. LINQを使用してテーブルを切り捨てます
- 9. MPAndroidChart結合点で切り捨てポイントが切り捨てられます
- 10. AttributedStringでトレールを切り捨てます
- 11. Tableauはテーブル内のフィールドを切り捨てます
- 12. iTextSharp - テーブルの最後の行を切り捨てます。
- 13. cakephpでシードする前にテーブルを切り捨てる
- 14. 切り捨てDrRacket
- 15. 配列のソートと切り捨て/切り捨て
- 16. 切り捨てテーブルはLCK_M_SCH_Sを解放しません
- 17. すべてのテーブルを切り捨てる - ルーム
- 18. テーブルを切り捨てまたは削除してテーブルを作成
- 19. ngTableのテキストを切り捨てます
- 20. JOptionPane.showMessageDialog JTextAreaメッセージを切り捨てます
- 21. ブートストラップグリッドのテキストを切り捨てます
- 22. プロミスのデータを切り捨てます
- 23. PyHandle(win32file)を切り捨てます。
- 24. UIButtonイメージを切り捨てます
- 25. ラベルのテキストを切り捨てます
- 26. UIBezierPathを切り捨てます
- 27. 文字列を切り捨てます。
- 28. log4jはスタックトレースを切り捨てます
- 29. post.excerptを切り捨てます
- 30. ストアドプロシージャを使用してSQL Serverで複数のテーブルを切り捨てます
1つのテーブルを切り捨てる必要があります(そして私はそれに感謝します)私は切り捨てられるように "すべて"を求めていたので、受け入れられた答えとしてYam Marcovicの答えを選択しました。 – CaptainCarl
投票ありがとうございます。全体のdb要件は、質問から明らかではなかった!ちょうど情報のために、rake db:dropはデータベースを落とします。要件がすべてのテーブルを切り捨てるだけであれば、ActiveRecord :: Base.connection.tables.collect {| table_name | ActiveRecord :: Base.connection.execute( "TRUNCATE#{table_name}")}。コールバックの世話をしないかもしれませんが、私はすべてのテーブルを切り捨てるので必要ではないと思います。 –
destroy_allは各レコードでdestroyを呼び出しますが、これはテーブルを切り捨てるのとはまったく異なります。 From documents:# #レコードをインスタンス化し、+ destroy +メソッドを呼び出すことによって+条件+に一致するレコードを破棄します。各オブジェクトのコールバックは #実行されます(:従属するの関連オプションと、 #+ before_destroy +/after_destroy + Observerメソッドを含む)。破棄されたオブジェクトのコレクション# を返します。それぞれ #に変更を加える必要がないことを反映して固定されます( #は保存されていないため)。 – justingordon