(ruby on rails)如何覆盖放在lib /中的模块方法

时间:2012-03-11 04:40:21

标签: ruby-on-rails methods module override

我正在使用Rails 2.3.5开发一个Web应用程序。 我在lib /文件夹中定义了模块,如下所示。

module TestModule
  class Basic < ApplicationController
    def show
      p "module method"
    end
  end
end

和load_paths在此库的environment.rb中描述如下

Rails::Initializer.run do |config|
  config.load_paths += %W[ #{RAILS_ROOT}/lib/test_module ]
end

但暂时,我想在不编辑lib方法的情况下覆盖上述方法。 所以,我将覆盖方法放在“config / initializers / override_show.rb”中,如下所示。

require_dependency "lib/test_module/basic.rb"
module TestModule
  class Basic
    def show
      p "new method"
    end
  end
end

没有“require_dependency”,我收到错误,因为没有加载位于lib /文件夹中的原始方法,所以我在覆盖TestModule之前放了“require_dependency”。

在上面的代码中,新方法只在激活服务器后才能正常工作一次。 但是,永远不会再调用新方法,并调用旧方法。 当我重新启动rails服务器时,新方法将只调用一次。

请给我一些关于如何覆盖lib文件夹中的方法的建议。 非常感谢你提前。

1 个答案:

答案 0 :(得分:0)

是否有可能只是将config / initializers / override_show.rb中的代码附加到lib / test_module / basic.rb?