在ActiveJob中调用方法执行

时间:2017-05-03 16:37:18

标签: ruby rails-activejob

我在打电话找工作时得到No Method Error。我不知道为什么。这是实际错误:

NoMethodError: undefined method `get_customers' for #
<GetCustomersJob:0x007f15280e4270>

我正在学习ActiveJob并创建了我的第一份超级简单的工作,并调用了我Shop模型上定义的方法。工作看起来像这样:

class GetCustomersJob < ActiveJob::Base
  queue_as :default

  def perform(current_shop)
    current_shop.get_customers.perform
  end
end

get_customers在我的商店模型上定义得很好,current_shopShop模型对象。 get_customers在此工作之外按预期工作。我似乎无法让它在这项工作中发挥作用。

我也尝试过:

Shop.current_shop.get_customers.perform

我做错了什么?

2 个答案:

答案 0 :(得分:0)

首先,更改perform方法 - 在那里您只想执行某些操作,在您的情况下,您要在get_customers对象上调用current_shop。那样做。

class GetCustomersJob < ActiveJob::Base
  queue_as :default

  def perform(current_shop)
    current_shop.get_customers # removed .perform
  end
end

后来,你想打电话给这份工作。为此,您可以编写作业的类名,并使用perform_now立即运行作业:

GetCustomersJob.perform_now(Shop.current_shop)

perform_later将作业排队等待以后:

GetCustomersJob.perform_later(Shop.current_shop)

答案 1 :(得分:0)

我忘记在末尾使用 Test 命名测试类,因此 perform_now 未定义。

(为未来的我写这个 :wave:)