2012-03-06 13 views
11

gram z delayed_job i muszę usunąć wszystkie zadania o określonej wartości modułu obsługi, próbowałem w ten sposóbjak kwerendy obsługi delayed_job

class Auction < ActiveRecord::Base 
    def clean_jobs 
    Delayed::Job.all.each do |job| 
     job.delete if job.payload_object.auction_id == id 
    end 
    end 
end 

i działa, ale muszę przejść przez cała kolejka ... nie jest cool. Jak mogę obejść to? Dziękujemy

Odpowiedz

18

Używasz payload_object, który jest tekstem YAML.

Być może ten kod działa tak samo.

Delayed::Job.where("handler LIKE '%auction_id: #{id}%'").delete_all 

A dla podwójnego sprawdzenia:

Delayed::Job.where("handler LIKE '%auction_id: #{id}%'").each do |job| 
    job.delete if job.payload_object.auction_id == id 
end 
+2

genialny! działa tak, jak potrzebuję! –

+1

Możesz użyć spacji przed atrybutem i nowym znakiem linii, aby uniknąć konieczności sprawdzania każdego parametru payload_object - np. Opóźnione :: Job.where ("handler LIKE"% user_id: # {self.id}% \ n '") –

Powiązane problemy