2012-03-11 70 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