我在Rails中有一个记录列表,这些记录有一个布尔字段,可以将它们设为公共或私有。我需要一种方法将每个公共记录更改为私人每次 updated_at> = 30天前。
我不知道从哪里开始。欢迎任何建议,链接和提示。谢谢!
解决方案
根据@ lol007的推荐,我会随时使用gem。我遵循的步骤是:
在models / post.rb中添加下一个代码:
def self.check_updated_at
where('updated_at < ?', 30.minutes.ago).update_all({ :status => :true })
end
在config / schedule.rb中添加下一个代码:
every 3.minutes do
runner "Post.check_updated_at"
end
因为我正在开发中,我运行下一个命令:
$ whenever --update-crontab --set environment='development'
然后检查我的cron是否正常工作我运行下一个命令:
$ crontab -l
我的最后一步是运行rails服务器并开始运行我的应用程序。
我在测试中使用的其他行是:
$ whenever -w
在生产中生成cron文件。和
$ crontab -r
要删除cron文件,何时不是我想要的。
谢谢大家的时间和意见。
答案 0 :(得分:1)
您可以使用Whenever Gem。例如,在config / schedule.rb中:
every 1.day, :at => '4:30 am' do
runner "YourModel.check_updated_at"
end
在你的模特中:
def self.check_updated_at
where('updated_at > ?', 30.days.ago).update_all({private: true})
end
答案 1 :(得分:1)
您可以在模型中添加新方法,而不是让数据库字段根据时间自行更新:
class Wtf< ActiveRecord::Base
#...
# like this
def is_public
updated_at> 30.days.ago
end
# or like this
def self.only_public
where("updated_at> ?", 30.days.ago)
end
end
然后使用它:
Wtf.only_public.joins(:somethingelse).where("somethingelses.attribute= 42")
或
Wtf.first.is_public
答案 2 :(得分:0)
YourModel.update_all({:private => true}, "updated_at > 30.days.ago")