我试图覆盖第三方库中两个模块内的方法。
看起来像这样:
module Omnigollum
module Helpers
def kick_back
redirect !request.referrer.nil? && request.referrer !~ /#{Regexp.escape(settings.send(:omnigollum)[:route_prefix])}\/.*/ ?
request.referrer:
'/'
halt
end
end
end
此库中的其他函数使用此方法。我需要完全覆盖它。
我尝试了其他stackoverflow线程给出的大量解决方案,但到目前为止没有任何作用。
以下是我现在所拥有的:
module OmnigollumOverride
module Helpers
def kick_back
puts '=-=-=-=-=-=-=-=-=-==-=-'
puts '=-=-=-=-=-=-=-=-=-==-=-'
end
end
end
include Omnigollum
Omnigollum.module_eval { include OmnigollumOverride }
我只是打印一行来测试方法是否被正确覆盖。
答案 0 :(得分:0)
而不是:
include Omnigollum
Omnigollum.module_eval { include OmnigollumOverride }
打电话一次:
Omnigollum::Helpers.prepend OmnigollumOverride::Helpers
前置模块将其置于继承层次结构之上。无论您是想重新使用原始行为,都可以:
def kick_back
return super if SOME_CONDITION # call original method
puts '=-=-=-=-=-=-=-=-=-==-=-'
puts '=-=-=-=-=-=-=-=-=-==-=-'
end