Delayed_job:定义时间

时间:2011-04-20 04:46:32

标签: delayed-job

所以我想弄清楚如何干净利落地做到这一点。试图让示例保持简单,我可以说我有一个对象MyMailMeeting,其中我定义了两次我想要向会议中的人发送两封不同的电子邮件。

在我的MyMailMeeting模型中,我想要定义两种方法(而不是拥有自己的延迟作业类),但我需要让这些方法看到对象中定义的时间,以便知道何时发送

def send_first
  ... do stuff
end
handle_asynchronously :send_first, :run_at => Proc.new { send_first_time }

问题在于,根据documentationsend_first_time需要是一个类方法,并希望它是一个实例方法,以便我可以看到用户定义的时间。

我该怎么做?或者我只需要创建两个单独的Delayed_job类并执行以下操作:

Delayed::Job.enqueue(SendFirstJob.new, :run_at => send_first_time)

2 个答案:

答案 0 :(得分:2)

我相信handle_asynchronously将对象传递给Procs for itstributs,所以:

handle_asynchronously :send_first, :run_at => Proc.new { |obj| obj.send_first_time }

您可以随时滚动自己的异步包装

def send_first_async(*args)
  delay(:run_at => send_first_time).send_first(*args)
end

答案 1 :(得分:0)

我最终使用了第二种方法。虽然它不像我想的那样时间敏感。

如果有人对如何使send_first_time成为基于用户输入的变量有答案,我很乐意接受它作为正确的答案。感谢。