2012-03-06 13 views
11

sto giocando con delayed_job e ho bisogno di eliminare tutto il lavoro con un valore gestore specificato, ho provato in questo modocome interrogare gestore 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 

e funziona ma devo passare attraverso il tutta la fila ... non è bello. Come posso aggirare questo? Grazie

risposta

18

Si sta utilizzando payload_object, che è un testo YAML.

Può essere che questo codice faccia la stessa cosa.

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

E per doppio controllo:

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

brillante! funziona come ho bisogno! –

+1

Puoi utilizzare lo spazio prima dell'attributo e il carattere della nuova riga in seguito per evitare di dover controllare ogni oggetto payload - ad es. Ritardato :: Job.where ("gestore LIKE LIKE"% user_id: # {self.id}% \ n '") –