【问题标题】:Delayed Job seeking method延迟求职方法
【发布时间】:2019-10-01 02:27:02
【问题描述】:

我在 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: Foo::Bar:Module 的未定义方法 `do_thing'

我不知道它为什么在“模块”中搜索,如何让它运行我想要的方法。我对 Ruby 还是很陌生。谢谢!

【问题讨论】:

    标签: ruby delayed-job


    【解决方案1】:

    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 都是小写的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2013-09-25
      • 2012-04-16
      • 2014-05-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多