【发布时间】:2015-10-28 06:28:10
【问题描述】:
我正在尝试从包含的模块执行基类中的方法。所以假设我有以下代码
module B
def self.included(base)
base.extend(ClassMethods)
# code to execute A.new.my_instance_method
# code to execute A.my_static_method
end
def my_module_instance_method
puts 'module_instance_method'
end
module ClassMethods
def my_module_static_method
puts 'module_static_method'
end
end
end
class A
include B
def my_instance_method
puts 'Instance Method'
end
def self.my_static_method
puts 'static method'
end
end
如何让这两种方法执行?
基本上我正在尝试扩展 ActiveJob,并且我想覆盖 around_perform。我想通过混合一个模块来实现这一点,该模块将 around_perform 添加到工作中并在我的工作之前和之后触发一些代码。我一直在尝试理解模块是如何工作的,但是在理解事情是如何工作的方面仍然存在差距。根据我的阅读,这与我需要的相似。
任何方向表示赞赏。
【问题讨论】:
-
self.included回调在 ruby 执行A的 类声明 时调用,恰好在include B出现的地方。 TL;DR:将include B放在A声明的最后。 -
@mudasobwa: 这不是 TL :)
-
谢谢,这行得通。但是,在文件顶部包含模块更为常见。由于这种方法会使使用这个库变得更加复杂和混乱,有没有办法做到这一点,我可以在顶部包含模块?我猜不是。
-
我只是复制并粘贴了您的代码,没有出现任何错误或任何可疑之处。要么没有问题,要么你的代码不能代表你的问题。
-
@JörgWMittag 我不确定您是否阅读了整个问题或代码,但代码本身没有错误。查看注释掉的代码,看看我想要实现的目标。
标签: ruby rails-activejob