0

Je souhaite planifier un travail retardé contenant une ou plusieurs requêtes d'enregistrement actives qui seront évaluées lors de l'exécution du travail.Enregistrement d'une requête ActiveRecord non évaluée dans DelayedJob

Ex. J'ai un Job personnalisé qui génère et envoie des notifications aux utilisateurs. Je souhaite envoyer des paramètres/requêtes/conditions au travail qui filtrerait les utilisateurs auxquels les notifications sont envoyées.

Je pourrais évaluer une chaîne mais cela semble si moche.

Le projet utilise Rails 2.3.5, donc je ne peux pas utiliser la route Arel.

Je vois des choses sur Ambition mais rien depuis 2008 donc je ne suis pas sûr de l'état du projet.

Suggestions?

Répondre

1

Vous pouvez envoyer les conditions, etc., comme un hachage au travail lorsque vous le créez, puis l'utiliser comme vous le faites normalement avec ActiveRecord. Peut-être quelque chose comme ceci:

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

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

end 

Et puis vous créez le travail comme celui-ci:

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

Si cela ne fonctionne pas pour vous, alors peut-être vous pouvez fournir votre code actuel.

+0

Je pense que ça va marcher! Merci! – rmw