我需要系统每天运行以下代码,但我不知道如何做到这一点。
@user = User.all
date = Date.today
if date.workingday?
@user.each do |user|
if !Bank.where(:user_id => user.id , :created_at => (date.beginning_of_day..date.end_of_day) , :bank_type => 2 ).exists?
banco = Bank.new()
banco.user = user
banco.bank_type = 2
banco.hours = 8
banco.save
end
end
end发布于 2016-03-03 17:50:01
最传统的方法是将其设置为使用rails runner在 job中执行。
有些像whenever这样的工具可以通过定义它们需要在Ruby中执行的频率而更容易地创建这些作业,而不是以特殊的、有时难以理解的crontab格式执行。
值得注意的是,User.all是一件非常危险的事情。随着系统中用户数量的增加,将它们全部装入内存将最终摧毁您的服务器。您应该在100左右的组中加载它们,以避免内存超载。
此外,如果您已经在这里设置了适当的where和belongs_to关系,则不应该使用该belongs_to子句。我认为这是可行的:
unless (user.bank)
user.create_bank(
bank_type: 2,
hours: 8
)
end目前还不清楚created_at是如何影响到这里的。这些是每天分配的吗?如果是这样的话,那应该是类似于bank_date的DATE类型列,而不是日期和时间。使用created_at时间戳作为关系的一部分是自找麻烦,这应该反映记录创建时的情况,仅此而已。
https://stackoverflow.com/questions/35779286
复制相似问题