0

我想在 24 小时后存档(或删除)帖子。这可能吗 ?当用户在 24 小时后登录时,不会显示之前的帖子,而只会显示为接下来的 24 小时创建新帖子的链接。现在,以前的帖子是否被删除并不重要,但我会喜欢学习两种方式。干杯

4

3 回答 3

1

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

 Post.where( 'created_at > ?', 1.day.ago )
于 2013-07-22T01:31:36.623 回答
1

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

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

有几点需要了解:

  1. 任何你想只显示最近帖子的地方,你必须使用 .recent_posts 范围
  2. 需要 lambda 是因为这会导致每次调用范围时都会在运行时评估当前时间 (Time.now);只做一个没有 lambda 的 where 会使 Time.now 的评估是静态的,不会随着时间而改变。
  3. .to_s(:db) 确保时间戳的格式正确,以供数据库评估。
  4. 它假设您的帖子表上有时间戳。
  5. 可以应用 default_scope 用于针对模型的每个查询,但明确排除的查询除外。这通常被认为是一种不好的做法,因为没有意识到隐式应用范围很容易出错。

从您的数据库中真正归档记录是可能的。在不知道你的表结构是什么的情况下,很难确切地说出如何去做,但一般来说,你有两种选择: 1. 使用计划定期运行(如每晚)的 rake 任务来查找应该是的记录归档,在新表中创建归档记录并销毁活动表中的记录。2. 在数据库中创建与上述逻辑类似的逻辑(如存储过程),然后再次使用某种调度程序来触发它。

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

于 2013-07-22T01:32:30.447 回答
0

查看 两个Railscast 以了解何时安排作业。

于 2013-07-22T01:52:29.663 回答