私は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フォルダのメソッドをオーバーライドする方法についていくつかアドバイスをしてください。 ありがとうございます。
いいえ、これらのファイルを分けたいです。任意のソリューションですか? – Mojalin
config/environments/development.rbに "config.cache_classes = true"を設定した場合。新しいメソッドは毎回うまく動作します。他の解決策はありますか? – Mojalin
config/initializers内のファイルは、起動時に1回だけロードされます。モデルは、各要求ごとにリロードされます。私は他の解決策について考えることはできません。 – Yanhao