Отложенный метод поиска работы - PullRequest
0 голосов
/ 30 сентября 2019

У меня есть модуль в модуле на Ruby, что-то вроде:

Module Foo
  Module Bar
    def do_thing_as_delayed_job(my_id, my_option_array)
      Delayed::Job.enqueue Foo::Bar.do_thing(my_id, my_option_array)
    end
    def do_thing(my_id, my_option_array)
      Rails.logger.info("Yay, I got here!")
    end
  end
end

Я пытаюсь запустить отложенный стартер задания. Однако, когда я запускаю do_thing_as_delayed_job, я получаю это:

NoMethodError: неопределенный метод `do_thing 'для Foo :: Bar: Module

Я не знаюпочему он ищет в «модуле», как заставить его просто запустить метод, который я хочу. Я все еще новичок в Ruby. Спасибо!

1 Ответ

1 голос
/ 30 сентября 2019

Foo::Bar.do_thing вызывает do_thing на самом модуле. Вы определили этот метод как def do_thing, что делает его методом экземпляра. Это означает, что для вызова do_thing вам нужно иметь экземпляр этого класса, в котором этот модуль смешан в (1), или вам нужно изменить этот метод на метод модуля (2).

Код для (1)

class A
  include Foo::Bar
end

module Foo
  module Bar
    def do_thing_as_delayed_job(my_id, my_option_array)
      Delayed::Job.enqueue A.new.do_thing(my_id, my_option_array)
    end
    def do_thing(my_id, my_option_array)
      Rails.logger.info("Yay, I got here!")
    end
  end
end

Код для (2):


module Foo
  module Bar
    def do_thing_as_delayed_job(my_id, my_option_array)
      Delayed::Job.enqueue A.new.do_thing(my_id, my_option_array)
    end
    def self.do_thing(my_id, my_option_array)
      Rails.logger.info("Yay, I got here!")
    end
  end
end

Обратите внимание, что в обоих случаях module является строчным.

...