ActiveJobs方法是实例方法还是类方法?

时间:2018-08-24 21:00:38

标签: ruby-on-rails rails-activejob

我有我的工作类别,想知道我是否可以定义一种辅助方法,以使在一个任务中初始化的变量不会被运行该任务的下一个任务看到。

换句话说,以下线程安全吗?

class OrdersUpdateJob < ActiveJob::Base

  def perform
    p my_method
  end

  def my_method
     @sth ||= 0
  end
end

1 个答案:

答案 0 :(得分:3)

您有类方法和实例方法。与任何类一样,类方法的定义均以self开头。

ActiveJob::Base.methods.select{|m| m == :perform}
=> []
ActiveJob::Base.instance_methods.select{|m| m == :perform}
=> [:perform]

在基类上没有“ perfom”方法,但是在实例方法上只有一种perfom方法。

我认为您要问的是这些作业是由一个类还是该类的实例运行。看到只有instace_methods包括:perform,我可以说ActiveJobs作为实例运行。因此,您应该能够使用没有线程冲突的实例变量。