2012-03-11 5 views
0
에있는 모듈 메소드를 오버라이드하는 방법

레일즈 2.3.5에서 웹 애플리케이션을 개발 중입니다. 다음과 같이 모듈을 lib/folder에 정의했습니다.(ruby on rails) lib/

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

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

을 다음하지만 시간적으로 나는 LIB 방법을 편집하지 않고 위의 방법을 재정의 원하는대로 load_paths이 라이브러리의 environment.rb에 설명되어 있습니다. 그래서 다음과 같이 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"를 넣어, 오류가 발생합니다.

위의 코드에서 새 메서드는 서버를 활성화 한 직후에 한 번만 제대로 작동합니다. 그러나 새 메서드는 다시 호출되지 않으며 이전 메서드가 호출됩니다. 레일 서버를 다시 시작하면 새 방법이 한 번만 호출됩니다.

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 내의 파일은 부팅 할 때마다 한 번만로드됩니다. 각 요청에 따라 모델이 다시로드됩니다. 나는 다른 해결책을 생각할 수 없다. – Yanhao