Active Recordのdeleteとdestroy


RailsのActive Record(モデル)のdestroydeleteについての紹介です。

🍣 destroy_allについて

destroy_allは条件にマッチするレコードを関連テーブルも含めて削除します。
Active Recordのオブジェクトを解するので、1行ずつ削除されます。

🤔 delete_allについて

delete_allはSQLのDELTE文を流します。そのため、関連テーブルの削除は行いません。
まとめてDELTEのSQLを実行するため、削除の効率はよいです。

🐮 destroyでバリデーションを行う

destroy実行前にバリデーションを行う場合はbefore_destroyのコールバックを使います。

class Article < ActiveRecord::Base
before_destroy def check_publish
errors.add :base, '公開中の場合は記事を削除できません' if published?
return false
end
end
end

これで、destroyの実行時に処理を分岐できます。

if @article.destroy
redirect_to articles_path, notice: '削除しました'
else
render :show, notice: '削除できませんでした'
end

🚕 参考リンク

🖥 VULTRおすすめ

VULTR」はVPSサーバのサービスです。日本にリージョンがあり、最安は512MBで2.5ドル/月($0.004/時間)で借りることができます。4GBメモリでも月20ドルです。 最近はVULTRのヘビーユーザーになので、「ここ」から会員登録してもらえるとサービス開発が捗ります!

📚 おすすめの書籍