Rails 引擎:控制器继​​承和路由

Rails engines : Controller inheritance and routes

我有一个引擎,在我的主应用程序中,我的控制器继承了一些引擎的控制器。

class UsersController < MyEngine::UsersController

end

如何强制我的引擎使用子控制器而不必在我的主应用程序中重新创建我的所有路线?

---- 带装饰器(JensD 的解决方案):

我添加到我的 engine.rb 文件

config.to_prepare do
  Dir.glob(Rails.root + "app/decorators/**/my_engine/*_decorator*.rb").each do |c|
    require_dependency(c)
  end
end

和装饰器

MyEngine::MyController.class_eval do
end

但是super不可能...

一个解决方案是在我的引擎中创建一个子控制器并在其上使用装饰器,但这看起来很奇怪...

我更喜欢用这个 gem 作为装饰器而不是 require_dependency:

https://github.com/EPI-USE-Labs/activesupport-decorators

有了这个 gem 或者你的 require_dependency 你可以使用:

alias_method :super_index, :index
def index
  ...
  super_index
end