Rails:运行一个函数,该函数将生成一个日期并在该日期运行另一个函数

时间:2015-08-14 12:17:15

标签: ruby-on-rails methods time gem

我正在寻找一种方法来实现它,这样当你运行一个函数时,它会在两个定义的日期之间产生一个随机日期,它将存储在某个地方,这样就可以运行那个日期的其他函数。 / p>

简而言之,我需要能够在定义的日期执行功能的东西。

如果我不够清楚,请告诉我。

谢谢。

1 个答案:

答案 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}}在截止日期执行该任务。