Расширение контроллеров движка Rails 3 в основном приложении

Я использую движок Rails в качестве драгоценного камня в своем приложении. В движке есть PostsController с рядом методов, и я хотел бы расширить логику контроллера в моем основном приложении, например, добавить несколько методов. Если я просто создаю PostsController в основном приложении, тогда контроллер движка не будет загружен.

В вопросе предлагается решение Rails-движки, расширяющие функциональность на основе изменения ActiveSupport :: Зависимости # require_or_load

Это единственный / правильный способ сделать это? Если да, то где мне поместить этот фрагмент кода?

РЕДАКТИРОВАТЬ1:

Это код , предложенный Андриусом для Rails 2.x

module ActiveSupport::Dependencies
  alias_method :require_or_load_without_multiple, :require_or_load
  def require_or_load(file_name, const_path = nil)
    if file_name.starts_with?(RAILS_ROOT + '/app')
      relative_name = file_name.gsub(RAILS_ROOT, '')
      @engine_paths ||= Rails::Initializer.new(Rails.configuration).plugin_loader.engines.collect {|plugin| plugin.directory }
      @engine_paths.each do |path|
        engine_file = File.join(path, relative_name)
        require_or_load_without_multiple(engine_file, const_path) if File.file?(engine_file)
      end
    end
    require_or_load_without_multiple(file_name, const_path)
  end
end

15
задан Community 23 May 2017 в 11:45
поделиться