自动更改帖子Rails的状态

时间:2015-05-08 20:18:28

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-4 activerecord

在我的rails应用程序中,我有一个工作模型,我希望状态在管理员批准30天后自动更改为“已存档”这可能吗?如果是这样的话怎么办?

2 个答案:

答案 0 :(得分:1)

我会添加一个名为" archive_time"的属性。作为进入批准状态的日期时间。 然后,您可以设置rake任务以设置存档状态以及archive_time过去的位置。这可能如下所示:

{
  "name": "marvel/avengers",
  "description": "Earth's Mightiest Heroes",
  "authors": [
    {
      "name": "Stan Lee"
    }
  ],
  "require": {
    "php": ">=5.4.0",
    "illuminate/support": "4.2.*"
  },
  "autoload": {
    "classmap": [
      "src/controllers"
    ],
    "psr-0": {
      "Marvel\\Avengers": "src/"
    }
  }
}

然后安排rake任务每天运行一次。我会用cron来实现这个目标。

答案 1 :(得分:1)

rake任务或后台作业(例如“活动作业”或“延迟作业”)可以执行此操作,但在这种情况下您可能不需要它们。如果要处理数据库中的时间戳,则可以创建范围或方法以将作业标记为已存档。

例如,如果您有一个名为approved_at的列datetime。批准作业时,请设置approved_at = Time.now

现在您可以创建一个方法来指示作业是否已存档:

def is_archived?
  approved_at && approved_at < Time.now - 30.days
end

要获取所有已归档的作业,您可以创建范围:

scope :archived, -> { where('approved_at IS NOT NULL AND approved_at <?', Time.now - 30.days)}