我要在创建这些帖子的用户在指定的日期和时间之后使帖子无效。我添加了一个布尔字段“已发布”,以使帖子生效或不活跃。
如果帖子处于有效状态,则每位访问者都会看到该帖子。如果它处于非活动状态,则该帖子将在用户仪表板中显示为非活动状态。
对于你们,在给定的日期时间过后,使帖子无效的最佳方法是什么?这应该是自动的,但我认为合适的方式不是使用Active Job;
我正在使用heroku,所以这会让我的工作人员一直很忙。
答案 0 :(得分:3)
如果您只是计划获取并显示帖子,而不是设置布尔值,则只需向模型添加范围:
scope :published, -> { where('publish_at < ?', Time.now) }
并像这样使用Post.published
如果有帮助,请告诉我。
更新1:
如果您需要确定帖子是否有效,请向模型添加一个方法,如
def active?
self.publish_at < Time.now
end
答案 1 :(得分:1)
你可以做一些事情:
选项1:
根据@ jawad-khawaja的回答,我认为更好的方法是使用expired_at
而不是published_at
,因为对我来说,发布日期是一个帖子可供人们使用的日期。这样,用户可以为自己的帖子定义过期日期(不是相同的发布日期)。
这里有一些示例,说明如何根据失效日期获得有效/无效的帖子
# 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
为datetime <强>结论:强>
我推荐的方法是选择选项1.