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