2012-03-06 50 views
11

我與delayed_job的打,我需要刪除所有的工作與指定的句柄值,我想用這種方式如何查詢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 

和它的作品,但我必須要經過整個隊列...不酷。我該如何解決這個問題? 謝謝

回答

18

您正在使用payload_object,它是一個YAML文本。

可能是這段代碼做同樣的事情。

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

而對於仔細檢查:

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

輝煌!它按我的需要工作! – 2012-03-06 18:57:06

+1

您可以使用屬性之前的空格和之後的新行字符來避免檢查每個payload_object - 例如Delayed :: Job.where(「handler LIKE'%user_id:#{self.id}%\ n'」) – 2015-06-26 22:55:46