Rails:运行 一个将生成日期的函数和 运行 该日期的另一个函数
Rails: Run a function that will generate a date and run another function at that date
我正在寻找一种方法来实现它,这样当您 运行 一个函数时,它会在两个定义的日期之间生成一个随机日期,该日期将存储在某个地方,以便其他函数以某种方式在那个日期可以是 运行.
简而言之,我需要能够在定义的日期执行功能的东西。
如果我不够清楚,请告诉我。
谢谢。
嗯,好老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
在截止日期执行它。
我正在寻找一种方法来实现它,这样当您 运行 一个函数时,它会在两个定义的日期之间生成一个随机日期,该日期将存储在某个地方,以便其他函数以某种方式在那个日期可以是 运行.
简而言之,我需要能够在定义的日期执行功能的东西。
如果我不够清楚,请告诉我。
谢谢。
嗯,好老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
在截止日期执行它。