Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 记录过期_Ruby On Rails_Activerecord_Ruby On Rails 4 - Fatal编程技术网

Ruby on rails 记录过期

Ruby on rails 记录过期,ruby-on-rails,activerecord,ruby-on-rails-4,Ruby On Rails,Activerecord,Ruby On Rails 4,我的Rails应用程序允许管理员向其他玩家提供存储在数据库表中的违规行为。这些违规行为有积分值,加起来给玩家一个积分值。但是,这些记录将包含到期时间戳。是否有任何方法可以在达到到期日期时自动删除违规记录?使用默认范围过滤过期记录如何?差不多 class Infraction < ActiveRecord::Base default_scope -> { where("expired_at IS NULL OR expired_at < ?", Time.now) }

我的Rails应用程序允许管理员向其他玩家提供存储在数据库表中的违规行为。这些违规行为有积分值,加起来给玩家一个积分值。但是,这些记录将包含到期时间戳。是否有任何方法可以在达到到期日期时自动删除违规记录?

使用默认范围过滤过期记录如何?差不多

class Infraction < ActiveRecord::Base

  default_scope -> { where("expired_at IS NULL OR expired_at < ?", Time.now) }

  before_create :set_expired_at

  private
  def set_expired_at
    self.expired_at = Time.now + 1.week
  end

end
类违规{where(“expired\u at为NULL或expired\u at<?”,Time.now)}
创建之前:将过期设置为
私有的
def set_已过期
self.expired_at=Time.now+1.5周
结束
结束

通过这种方式,您可以执行
违规。查找(4)
,如果id==4的违规过期,它将不会被返回。

您可以运行定期的cron作业,删除过期的记录。或者使用基于Rails的调度程序。我很惊讶在网上搜索这个功能并没有得到任何结果。这是个好主意,但它并没有真正回答我的问题。我将不得不在将来自动删除其他记录,我希望现在可以实现一些东西来处理这个问题,我宁愿没有不必要的记录阻塞我的数据库。啊,好的。在这种情况下,您需要运行后台工作程序或cron作业。此答案与cron作业相结合可能是一个很好的解决方案,可以保持数据库干净,并且如果您需要非常精确的过期时间,还可以获得更准确的结果。我刚才也在读关于Redis的文章,它有过期值,Redis会自动删除过期记录。我想下次我需要这个功能的时候我会试试这个。