使用ruby和rails设置时间后归档帖子

时间:2013-07-22 01:13:39

标签: sql ruby-on-rails ruby database postgresql

我想在24小时后存档(或删除)帖子。这可能吗 ?当用户在24小时之后登录之前的帖子将不会显示,而只是显示为下一个24小时创建新帖子的链接。现在,如果先前的帖子被删除并且不愿意学会以两种方式做到这一点并不重要。欢呼声

3 个答案:

答案 0 :(得分:1)

这将检索不到24小时的记录......

 Post.where( 'created_at > ?', 1.day.ago )

答案 1 :(得分:1)

在不必更改或销毁有关帖子的数据的情况下执行此操作的一种方法是在记录上使用范围。例如,您可以执行以下操作:

scope :recent_posts, lambda { where("created_at <= ?", (Time.zone.now - 24.hours).to_s(:db)) }

有几点需要了解:

  1. 您希望仅显示最近帖子的任何地方,您必须使用.recent_posts范围
  2. 需要lambda,因为这会导致每次调用作用域时在运行时计算当前时间(Time.now);只做一个没有lambda的地方会使Time.now的评估变得静态而不会随着时间的推移而改变。
  3. .to_s(:db)确保正确格式化时间戳以供数据库评估。
  4. 假设您的帖子表上有时间戳。
  5. 可以对模型应用每个查询使用的default_scope,但明确排除的除外。这通常被认为是一种不好的做法,因为没有意识到隐含地应用范围很容易犯错误。
  6. 可以真正归档数据库中的记录。如果不知道你的表结构是什么,很难确切地知道如何去做,但一般来说你有两种选择:  1.使用计划定期运行的rake任务(如每晚),查找应存档的记录,在新表中创建存档记录并销毁活动表中的记录。  2.在数据库中创建逻辑(如存储过程),逻辑与上面类似,并再次使用某种调度程序来触发它。

    第一种可能是最简单,最易理解的方法,但不适用于大型数据集。第二个可能会表现得更好,但通过在Rails中放置一些应用程序代码和数据库层中的其他应用程序代码来引入额外的复杂性。

答案 2 :(得分:0)

查看these two Railscast,了解whenever来安排工作。