2012-11-27 18 views
5

すべてをレールですばやく破壊する方法はありますか?Railsでdestroy_allをより効率的に実行するには?

これは、レールごとにレコードごとに個別のSQLクエリを削除するためです。

たとえば、4レコードの検索でdestroy allを呼び出すと、4 delete sqlコマンドが実行されます。

Blerg.where("created_at > yesterday").destroy_all (4 results) 

その後、calles ...

DELETE FROM "blergs" WHERE "blergs"."id" = $1 [["id", 197782]] 

4回。

SQLコマンドを取得する方法はありますか?

答えて

9

あなたはオールウェイズこれが唯一のクエリを与える

Blerg.where("created_at > yesterday").delete_all 

呼び出すことができます。これは削除されるオブジェクト上の任意のコールバックを呼び出していないことを

DELETE FROM "blergs" WHERE (created_at > '2012-11-26 16:27:56.678872') 

注意。

+3

コールバックは重要なポイントです。あなたが:dependent =>::関係を破壊するものがあれば、それも削除されません。 –

+0

ええ、この回答を探している人は、コールバックがないことに注意する必要があります。かなり重要です。 – Smickie

1

また、より簡潔である

Blerg.delete_all("created_at > '2012-11-01 00:00:00'") 

を行うことができます。 1つのSQL文を実行します。

関連する問題