首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >延迟求职法

延迟求职法
EN

Stack Overflow用户
提问于 2019-09-30 18:22:12
回答 1查看 26关注 0票数 0

我在Ruby的模块中有一个模块,类似于:

代码语言:javascript
复制
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:`do_thing‘的未定义方法

我不知道它为什么要在‘模块’中搜索,如何让它只运行我想要的方法。我在Ruby还是个新手。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-30 18:26:24

Foo::Bar.do_thing对模块本身调用do_thing。您已经将此方法定义为def do_thing,使其成为实例方法。这意味着要调用do_thing,需要有一个将该模块混合在(1)中的类的实例,或者需要将该方法更改为一个模块方法(2)。

(1)代码

代码语言:javascript
复制
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)款代码:

代码语言:javascript
复制
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都是较低的。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58173261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档