0

Ich möchte einen verzögerten Job planen, der eine aktive Datensatzabfrage (oder -bedingungen) enthält, die ausgewertet wird, wenn der Job tatsächlich ausgeführt wird.Speichern einer nicht bewerteten ActiveRecord-Abfrage in DelayedJob

Ex. Ich habe einen benutzerdefinierten Job, der Benachrichtigungen an Benutzer generiert und sendet. Ich möchte Parameter/Abfrage/Bedingungen an den Job senden, der die Benutzer filtern würde, an die Benachrichtigungen gesendet werden.

Ich könnte eine Zeichenfolge auswerten, aber das scheint so hässlich.

Das Projekt verwendet Rails 2.3.5, so kann ich nicht die Arel-Route gehen.

Ich sehe Sachen über Ehrgeiz aber nichts seit 2008, also bin ich nicht sicher über den Status des Projekts.

Vorschläge?

Antwort

1

Sie können die Bedingungen usw. als Hash an den Job senden, wenn Sie ihn erstellen, und ihn dann genauso verwenden, wie Sie es normalerweise mit ActiveRecord tun. Vielleicht so etwas wie dieses:

class NotificationJob < Struct.new(:message, :query) 

    def perform 
    @users = User.all(query) 
    ... 
    end 

end 

Und dann legen Sie den Job wie folgt aus:

query = {:conditions => ["users.company_id = ?", @company.id]} 
Delayed::Job.enqueue(NotificationJob.new("There is no cake",query), 0, Time.now) 

Wenn dies funktioniert nicht für Sie, dann vielleicht können Sie Ihren aktuellen Code liefern.

+0

Ich denke, das wird funktionieren! Vielen Dank! – rmw