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のテーブルの仕様なんでしょうねー。と勝手に理解しました。
コメントを書く