在日期和时间后使帖子处于非活动状态

Making posts inactive after a date and time

我必须让创建这些 post 的用户在给定日期和时间后将其设为非活动状态。我添加了一个布尔字段 "published" 来使 post 处于活动状态或不活动状态。

如果 post 处于活动状态,每个访问者都会看到 post。如果它处于非活动状态,post 将在用户仪表板中显示为非活动状态。

对于你们来说,在给定的日期时间过去后使 post 不活动的最佳方法是什么?那应该是自动的,但我不认为合适的方法是使用 Active Job 和 ;

我正在使用 heroku,所以这会让我的工作人员一直很忙。

如果您只是打算获取和显示 posts,而不是设置布尔值,您可以只向模型添加一个范围:

scope :published, -> { where('publish_at < ?', Time.now) }

然后像这样使用Post.published

如果有帮助请告诉我。

更新 1:

如果您需要确定 post 是否处于活动状态,请像这样向模型添加一个方法,

def active?
    self.publish_at < Time.now
end 

你可以做一些事情:

选项 1:

根据@jawad-khawaja 的回答,我认为更好的方法是使用 expired_at 而不是 published_at 因为对我来说,发布日期是 post 可供人们使用。这样用户就可以为自己的post定义一个到期日期(不是相同的发布日期)。

这里有一些示例,您可以如何根据到期日期

获取 active/inactive post
# active posts
scope :published, -> { where('expired_at > ?', Time.now) }

# inactive posts
scope :unpublished, -> { where('expired_at < ?', Time.now) }

选项 2:

如果您有一个属性 published 作为布尔值并且您确实需要自动标记它,选项是使用 whenever gem

此选项的缺点

  • 您将有两个属性表示同一事物:published 作为布尔值,expiration_datetime 作为日期时间
  • 如果过期日期的最小单位是分钟,则需要每分钟检查是否每未过期 post进入过期状态。您的服务器可能会过载。

结论:

我推荐的方法是选择选项1。