Railsで時間制限を設けてデータを消す方法
Railsで時間制限を設けてデータを消す方法
最近RailsでWEBアプリを作ってます。わからなかったことがあって調べても
みつけにくかったのでここにまとめておきます。
状況としてはデータベースに保存したデータを一定時間ごとに消したいとかっていうときです。ほっておくとデータがサーバの容量を食い尽くしてしまうとき、かつ昔のデータを消しても支障がないときなど。
Railsではモデル作成時に自動で"created_at"と"updated_at"という風に
作成時間と更新時間を追あkしてくれるのでこれを活用します。
def auto_delete @posts = Post.where("created_at<?", Time.now - (5.minutes)) @posts.each do |post| post.destroy end end
関数内一行目では現在時刻から5分前より前に作られたデータを取得しています。
数字.year, # 年 数字.month, # 月 数字.day, # 日 数字.hour, # 時 数字.min, # 分 数字.sec, # 秒
引く時間を指定するときには上記のように他の単位も使えます。
eash文では各要素を取り出して、自分がしたい処理を行えます。
まとめて消したいとかならこの文はいらないです。
画像などのデータをデータベースに格納しているのであればeach文内で削除の処理を
行えばいいと思います。
まだまだ駆け出しなので間違い等あればご指摘お願いいたします。 それでは。