延迟求职法
Delayed Job seeking method
我在 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: undefined method `do_thing' for Foo::Bar:Module
我不知道为什么它在'Module'中搜索,如何使它运行成为我想要的方法。我在 Ruby 还是个新手。谢谢!
Foo::Bar.do_thing
在模块本身上调用 do_thing
。您已将此方法定义为 def do_thing
,使其成为实例方法。这意味着要调用 do_thing
,您需要有一个 class 的实例,该实例将此模块混合在 (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
都是小写字母。
我在 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: undefined method `do_thing' for Foo::Bar:Module
我不知道为什么它在'Module'中搜索,如何使它运行成为我想要的方法。我在 Ruby 还是个新手。谢谢!
Foo::Bar.do_thing
在模块本身上调用 do_thing
。您已将此方法定义为 def do_thing
,使其成为实例方法。这意味着要调用 do_thing
,您需要有一个 class 的实例,该实例将此模块混合在 (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
都是小写字母。