每次在Rails中执行一次延迟作业时,如何更新数据?

时间:2019-04-06 07:44:48

标签: ruby-on-rails delayed-job

我正在使用DelayedJob调度report并将其发送到Rails中的customer中。 Customer可以选择特定持续时间的报告。例如,customer可以选择从日期'05 / 04/2019'到日期'06 / 04/2019'的报告。 Customer也可以设置frequencytime,即每天在特定时间运行报告。在这种情况下,fromto日期将每天递增。如果frequencymonthly,则日期将相应更新。

我的代码如下:

Report#schedule方法:


      def schedule
        #send report to customer
      end
      handle_asynchronously :schedule,
        frequency: Proc.new{ |r| r.deliver_frequency },
        run_at: Proc.new { |r| r.next_reschedule_time },


      def deliver_frequency
        if frequency.eql?('daily')
          'daily'
        elsif frequency.eql?('monthly?')
          'monthly'
        end
      end

“开始”日期和“结束”日期取自customer_params


    @customer.params[:from] = params[:from]
    @customer.params[:to] = params[:to]
    @customer.save

上述参数在customer属性中的保存方式为:


    :id => 10167,
    :params => {
        "from" => "05/04/2019",
        "to" => "06/04/2019"
    }

此日期保存在report_name中,该日期发送到customer

我的问题是,如何检查delay_job是否已执行给定任务,以便可以更新fromto日期。

我要实现的是,每次执行schedule方法时,日期都应根据频率进行更新。 例如:如果报告计划为“每日”,则fromto日期应在执行schedule之后每天更新。

如果频率是“每月”,并且报表安排在日期from: 22/3/2019 to: 22/4/2019上,那么,在下次执行计划方法时,日期应该更新为from: 22/4/2019 to: 22/5/2019

我尝试每天添加+1。但这不适用于每月一次的频率。

有人可以指导我如何实现上述目标吗?

谢谢

0 个答案:

没有答案