我正在寻找一种方法来实现它,这样当你运行一个函数时,它会在两个定义的日期之间产生一个随机日期,它将存储在某个地方,这样就可以运行那个日期的其他函数。 / p>
简而言之,我需要能够在定义的日期执行功能的东西。
如果我不够清楚,请告诉我。
谢谢。
答案 0 :(得分:1)
嗯,好老rand
应该可以解决问题:
require 'date'
first = Date.today
second = Date.parse '2018-08-08'
random = first + rand((second-first).to_i+1)
一些参考:random(i)
将生成[0..i-1]
范围内的随机整数(包括第一个和最后一个值)。 Date + Integer
给出了新的Date
,给定了将来的天数。 Date - Date
在几天内Dates
之间存在差异。
第二个问题是如何在特定日期运行任务。好吧,鉴于你有很多日期安排(而不仅仅是一个),使用whenever
gem是一个很好的决定。只需检查每天应该完成的任务并运行它们:
# config/schedule.rb
every 1.day do
runner "Task.perform"
end
# app/models/task.rb
class Task < ActiveRecord::Base
def self.perform
self.where(date: Date.today).each do |task|
# do what is needed to be done
end
end
end
所以,只需将schedule
保存到数据库Task.create(date: ...)
Task.perform
,然后等待{{1}}在截止日期执行该任务。