代码之家  ›  专栏  ›  技术社区  ›  rjurado01

延迟作业-按对象id查找

  •  2
  • rjurado01  · 技术社区  · 10 年前

    我使用了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 回复  |  直到 10 年前
        1
  •  1
  •   aelor    10 年前

    我不确定这对你来说是否有效。

    如果你有delayed_job对象id,你可以像普通的活动记录对象一样简单地找到它。

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

    现在,当您没有id时,请在创建作业过程中添加一些独特的内容

    在里面 用户_控制器.rb

    user = User.create
    

    在里面 用户.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)
    
        2
  •  0
  •   rjurado01    10 年前

    根据@aelor的回答,最后我不得不添加field object_id 至作业类别:

    # 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