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 在截止日期执行它。