delete_all と destroy_all について
諸事情で Rails 1.1.6 を使っているため、最近の事情には合致しないかもしれませんが、以下のような違いがありました。データベースには MySQL を使っています。
items と users が多対多の関係で、中間テーブルに item_users を用いているとします。高速化のため item_users テーブルの item_id 及び user_id は null 値を認めず、デフォルト値として0を指定しています。
@items = Item.find(:first) # 適当にアイテムを取得 @items.item_users.delete_all # 関連を削除
このように delete_all を使うと、削除された関連はレコードとしては削除されず item_id = 0 になって残りました。
一方、以下のコードを確認してください。
@items = Item.find(:first) # 適当にアイテムを取得 @items.item_users.destroy_all # 関連を削除
こちらでは、レコードからも値が削除されました。本来行いたい動作はこちらだと思うので、なるべく destroy_all を用いた方がいいのかもしれません。