RubyアプリのRailsのデータベーステーブルの1つのレコードをすべて削除するにはどうすればよいですか?
SQLを使用しない方法を探している場合は、delete_allを使用できます。
Post.delete_all
または基準付き
Post.delete_all "person_id = 5 AND (category = 'Something' OR category = 'Else')"
詳細については、 here を参照してください。
レコードは最初にロードせずに削除されるため、非常に高速になりますが、削除時に実行されるRailsコードに依存するカウンターキャッシュなどの機能が破損します。
SQL経由で削除するには
Item.delete_all # accepts optional conditions
各モデルのdestroyメソッドを呼び出して削除するには(高価ですが、コールバックが呼び出されるようにします)
Item.destroy_all # accepts optional conditions
すべて ここ
データベースに接続されているモデルを削除するだけでなく、データベースを完全に空にする場合は、次の操作を実行できます。
rake db:purge
また、テストデータベースでそれを行うことができます
rake db:test:purge
すべてのモデルのすべてのインスタンスを削除することを意味する場合、私は使用します
ActiveRecord::Base.connection.tables.map(&:classify)
.map{|name| name.constantize if Object.const_defined?(name)}
.compact.each(&:delete_all)
BlogPost.find_each(&:destroy)
すべてのテーブルのすべてのエントリを削除する場合の最新の回答:
def reset
Rails.application.eager_load!
ActiveRecord::Base.descendants.each { |c| c.delete_all unless c == ActiveRecord::SchemaMigration }
end
eager_load
here の詳細。
呼び出した後、ActiveRecord::Base
のすべての子孫にアクセスし、すべてのモデルにdelete_all
を適用できます。
SchemaMigrationテーブルをクリアしないように注意してください。
モデルがBlogPostの場合、次のようになります。
BlogPost.all.map(&:destroy)