2012-03-06 28 views
11

Tôi đang chơi với delayed_job và tôi cần phải xóa tất cả các công việc với một giá trị xử lý theo quy định, tôi đã cố gắng theo cách nàylàm thế nào để truy vấn delayed_job handler

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 

và nó hoạt động nhưng tôi phải đi qua toàn bộ hàng đợi ... không mát mẻ. Làm thế nào tôi có thể làm việc xung quanh điều này? Cảm ơn bạn

Trả lời

18

Bạn đang sử dụng payload_object, văn bản YAML.

Có thể mã này cũng làm như vậy.

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

Và để kiểm tra kép:

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

rực rỡ! nó hoạt động như tôi cần! –

+1

Bạn có thể sử dụng dấu cách trước thuộc tính và ký tự dòng mới sau đó để tránh phải kiểm tra từng payload_object - ví dụ: Bị trì hoãn :: Job.where ("handler LIKE '% user_id: # {self.id}% \ n'") –

Các vấn đề liên quan