延迟作业 - 按对象ID查找

时间:2015-03-27 09:07:46

标签: ruby-on-rails ruby mongoid delayed-job

我使用Rails + DelayedJob Mongoid。我有这个模型:

class User
  def run
    ...
  end
end

我创建了新的Dejayed::Job对象:

user = Use.create
user.delay.run

我怎么能这样做?

Delajed::Job.where(object_id: user.id)

2 个答案:

答案 0 :(得分:1)

我不确定这是否适用于您的情况。

如果你有delayed_job对象id,你可以像普通的activerecord对象一样找到它。

# find a job by id
job = Delayed::Job.find(params[:id])

现在你没有身份证明。然后在创建作业本身期间添加一些独特的东西

users_controller.rb

中的

user = User.create
user.rb

中的

def delayed_run
  my_job = MyJob.new('xyz')
  job = Delayed::Job.enqueue(run, 0, 1.hour.from_now)
  job.user_id = self.id
end

在此之后,您可以从唯一的user_id

中找到延迟的作业对象
Delayed::Job.where(user_id: 5)

答案 1 :(得分:0)

根据@aelor的答案,最后我必须将字段object_id添加到Job类:

# config/initializers/dejayed_job.rb

module Delayed
  module Backend
    module Mongoid
      class Job
        include ::Mongoid::Document
        field :object_id
      end
    end
  end
end

然后就可以了:

user = Use.create
user.delay(object_id: user.id).run

Delayed::Job.where(object_id: 5).first
=> #<Delayed::Backend::Mongoid::Job _id: 551a5116726a750e08000000