2012-03-11 5 views
0

Я разрабатываю веб-приложение в Rails 2.3.5. Я определил модуль в папке 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.

В приведенном выше коде новый метод работает только один раз после активации сервера. Однако новый метод никогда не вызывается снова, и вызывается старый метод. Когда я перезапускаю сервер рельсов, новый метод будет вызываться только один раз.

Просьба дать мне несколько советов о том, как переопределить метод в папке lib. Спасибо вам большое заблаговременно.

ответ

0

Возможно ли, что вы просто добавили код в config/initializers/override_show.rb в lib/test_module/basic.rb?

+0

Нет. Я бы хотел отделить эти файлы. любое решение? – Mojalin

+0

Если я установил «config.cache_classes = true» в config/environment/development.rb. новый метод отлично работает каждый раз. Есть ли другие решения? – Mojalin

+0

Файлы в config/initializers загружаются только один раз при каждой загрузке. Модели будут перезагружены по каждому запросу. Я не могу думать о других решениях. – Yanhao

Смежные вопросы