我在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:`do_thing‘的未定义方法
我不知道它为什么要在‘模块’中搜索,如何让它只运行我想要的方法。我在Ruby还是个新手。谢谢!
发布于 2019-09-30 18:26:24
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都是较低的。
https://stackoverflow.com/questions/58173261
复制相似问题