2012-03-11 60 views
0

中的模块方法我正在Rails 2.3.5中开发一个Web应用程序。 我在lib /文件夹中定义了模块,如下所示。(ruby on rails)如何覆盖放在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原来的方法/没有被加载的文件夹,所以我把“require_dependency”重写TestModule之前。

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

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

回答

0

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

+0

不,我想分开这些文件。任何解决方案 – Mojalin 2012-03-11 11:02:19

+0

如果我在config/environments/development.rb中设置了“config.cache_classes = true”。新方法每次都能正常工作。还有其他解决方案吗? – Mojalin 2012-03-11 11:40:33

+0

config/initializers中的文件仅在每次启动时加载一次。模型将在每个请求中重新加载。我想不出其他解决方案。 – Yanhao 2012-03-13 12:55:59

相关问题