Hatena::ブログ(Diary)

pochi’s weblog RSSフィード

2010-10-26 Railsのdeleteとdestroyの違いをおさらいする このエントリーを含むブックマーク

deleteとdestroyの違いをちょこちょこ忘れるのでメモ。

delete

ActiveRecordオブジェクトを介さずに削除する。(直接SQLを発行するイメージ)

オブジェクト同士に依存関係がない場合はこっちを使った方がActiveRecord

インスタンスを生成しない分早い。

destroy

ActiveRecordオブジェクトを介して削除する。

これは依存関係も一緒に削除したい場合に利用するといい。

destroy_allを呼ぶと結構時間かかる。

ちなみにこれはMySQLの物理テーブルサイズが変更されないことで調べ始めた。

delete_allを呼ぶと(要はDELETE FROM #{TABLE_NAME})物理テーブルサイズも変更されるんだけどdestoy_allを呼ぶと( #{TABLE_NAME}.class.each {|object| object.destroy })物理テーブルサイズは変更されなかった。MySQLのテーブルの仕様なんでしょうねー。と勝手に理解しました。