我在我的应用程序中使用 Rails 引擎作为 gem。该引擎有PostsController
许多方法,我想在我的主应用程序中扩展控制器逻辑,例如添加一些方法。如果我只是PostsController
在主应用程序中创建,则不会加载引擎的控制器。
有问题提出了一个解决方案Rails 引擎基于更改扩展功能ActiveSupport::Dependencies#require_or_load
这是唯一/正确的方法吗?如果是,我应该把那段代码放在哪里?
编辑1:
这是Andrius为 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