2011-04-20 20 views
1

所以我想弄清楚如何幹淨地做到這一點。試圖保持示例簡單可以讓我說我有一個對象,MyMailMeeting其中我定義了兩次,我想發送兩個不同的電子郵件給會議中的人。Delayed_job:定義時間

在我的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) 

回答

0

我最終使用了第二種方法。雖然它沒有我想要的那麼時間敏感。

如果有人如何讓send_first_time成爲基於用戶輸入的變量,我會很樂意接受它作爲正確的答案。謝謝。

2

我相信handle_asynchronously把對象變成特效爲其attributs這樣:

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 
+0

非常感謝您的回答。在gem的README/wiki中沒有延遲時間選項的例子,這個答案幫助我找出了一個簡短而又美好的方式來安排將來的任務,而不是使用醜陋的 - handle_asynchronously。 – Salil 2012-05-16 04:45:08