5

delayed_jobモデルのタスクを処理した後、モデルを更新する必要があります。例:

foo.delay.something

完了しsomethingたら、fooオブジェクトを更新する必要があります。これを実現するための最良の方法は何ですか?クラスでコールバックをコーディングすることを考えていましたDelayed::Backend::ActiveRecord::Jobが、これを行うにはもっとクリーンでより良いものがあるはずです。

4

3 に答える 3

3

#fooメソッドの最後で更新します。

def foo
  # do work here
  update_attribute :processed, true
end
于 2010-07-16T12:55:57.793 に答える
1

すでにオブジェクトに作用している仕事の一部としてあなたがそれをしない理由がわかりません。

于 2010-07-15T20:30:05.240 に答える
0

提案されたようにレコードを更新することは問題ありませんが、それは解決策の一部にすぎません...

コールバックは、失敗した場合の対処方法をさらに制御したい場合に役立ちます。

Delayed::Job.enqueue InstructionRequestJob.new( p1, p2 )

InstructionRequestJob perform
- perform a task on a remote server
- get a response
- case response
  when OK
    update attribute ( as suggested)
  else
    # how many attempts ?
    if too_many_attempts
       update attribute
       destroy the job
    else
       reschedule the job for another attempt
- end
于 2011-05-20T10:43:38.630 に答える