MySQLのデータをRailsのメソッドを用いて削除するには、
- destroy
- destroy_all
- delete
- delete_all
の4つがある。
この中で条件が指定できるのはdestroy_allとdelete_all。
destroy
destroyとdestroy_allがある。
ロードしたモデルオブジェクトを削除する。
その後に、freezeも行う。
destroy
hoge = Hoge.find(:first) hoge.frozen? #=> false hoge.destroy hoge.frozen? #=> true
これで、hogeオブジェクトは削除される。
モデルオブジェクトのロードと削除も一気に行える。
Hoge.destroy([1,3])
これでid=1とid=3が削除される。
が、条件の指定などはできない。
そこで、destroy_allの出番。
destroy_all
destroy_allは、引数に検索条件を指定できる。
Hoge.destroy_all(["created_at < ?", "2009-02-15"])
これで、2009年2月15日より前のデータはすべて削除される。
しかし、大量のレコードを削除するのにはdestroy、destroy_allは向かない。
destroy、destroy_allは削除される時にコールバック(あるタイミングで自動で実行される処理)を呼び起こすからである。
大量のレコードを削除するにはdelete、delete_allを用いる。
delete
deleteとdelete_allはSQLのDELETEを直接実行するので動作が早い。
従って大量のデータを削除するにはdelete、delete_allが向いている。
delete
delete(id)と書いてidにあたるレコードを削除する。
Hoge.delete([1,2,3])
これでid=1、2、3のレコードは削除される。
ここでも、条件指定はできない。
条件指定をするにはdelete_allを使う。