延迟作业 - 按对象 ID 查找

Delayed Job - Find by object id

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

class User
  def run
    ...
  end
end

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

user = Use.create
user.delay.run

我怎样才能做这样的事情?

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

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

如果你有 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)

根据@aelor 的回答,最后我不得不将字段 object_id 添加到 Job class:

# 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