2012-03-11 25 views
0
にあるモジュールメソッドをオーバーライドする方法

私はRails 2.3.5でWebアプリケーションを開発しています。 lib/folderに次のようにモジュールを定義しました。(ruby on rails)lib/

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

が、時間的に次のように

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

とload_pathsは、このライブラリのenvironment.rbの中で説明されて、私はlibにメソッドを編集することなく、上記のメソッドをオーバーライドします。 したがって、私はoverrideメソッドを "config/initializers/override_show.rb"に次のように置きます。 「require_dependency」なし

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

のlib /フォルダにある元のメソッドがロードされていなかったので、私はTestModuleをオーバーライドする前に「require_dependency」を入れているので、私は、エラーを取得します。

上記のコードでは、新しいメソッドは、サーバーをアクティブにした直後に1回だけ正常に動作します。 ただし、新しいメソッドは再度呼び出されず、古いメソッドが呼び出されます。 私は、レールサーバーを再起動すると、新しいメソッドは一度だけ呼び出されます。

libフォルダのメソッドをオーバーライドする方法についていくつかアドバイスをしてください。 ありがとうございます。

答えて

0

config/initializers/override_show.rbのコードをlib/test_module/basic.rbに追加することは可能でしょうか?

+0

いいえ、これらのファイルを分けたいです。任意のソリューションですか? – Mojalin

+0

config/environments/development.rbに "config.cache_classes = true"を設定した場合。新しいメソッドは毎回うまく動作します。他の解決策はありますか? – Mojalin

+0

config/initializers内のファイルは、起動時に1回だけロードされます。モデルは、各要求ごとにリロードされます。私は他の解決策について考えることはできません。 – Yanhao