0

私はRails 5アプリケーションで遅延ジョブを使用しています。例えばRails 5内の特定のオブジェクトのすべての遅延ジョブを削除します。

I旅行のモデルを持っており、2つの遅延ジョブ作成しています:だから私は2人の遅延の雇用を創出し

Trip.delay(run_at: ...).send_reminder 
Trip.delay(run_at: ...).get_feedback 

を。

旅行が削除された場合は、遅れているジョブも削除したいと思います。旅行が変更された場合は、ジョブ(新しいrun_at時間)を更新したいので削除して再作成します仕事。

しかし、旅行に属する仕事をどのように特定できますか?そこにはどんな方法がありますか?私はtrip_id列を追加しようとしていましたが、新しいジョブを作成するときにtrip_idを割り当てる方法がわかりません。

+0

このページでは、delayed_jobsテーブルに余分な列と関連付けを追加しています。https:// sunil kumarn.wordpress.com/2013/05/19/delayed-jobs-in-rails-adding-custom-attributes/ – Unixmonkey

答えて

0

この

class TripSendReminderJob < Struct.new(:trip) 
    def perform 
    # reload use the updated values of a trip, if it was changed 
    trip.send_reminder if trip.reload.active? # active? or any method or condition you need to check 
    end 
end 

のように各DelayedJob作業のためのジョブ・クラスを作成し、TripSendReminderJobなどのジョブオブジェクトを使用して、どこでも、あなたのコード内の

trip = Trip.find(trip_id) 
trip_send_reminder_job = TripSendReminderJob.new(trip) 
Delayed::Job.enqueue(trip_send_reminder_job, run_at: ...) 

ボーナスは、あなたが前のようなフックを使用することができます、エラー、失敗などがあります。DelayedJob github page

関連する問題