我使用 Rails 引擎作为cms。一切正常。我为此添加了设计。
我生成的设计控制器继承自 Devise::SessionsController。但是有一些过滤器是从引擎中的另一个控制器运行的,在这种情况下不会运行。许多网站都依赖于这些正在运行的过滤器。当然我可以复制它们,但那是糟糕的juju。
所以我的问题是:如何让一个控制器运行另一个控制器的过滤器?我宁愿不编辑任何一个宝石。
我使用 Rails 引擎作为cms。一切正常。我为此添加了设计。
我生成的设计控制器继承自 Devise::SessionsController。但是有一些过滤器是从引擎中的另一个控制器运行的,在这种情况下不会运行。许多网站都依赖于这些正在运行的过滤器。当然我可以复制它们,但那是糟糕的juju。
所以我的问题是:如何让一个控制器运行另一个控制器的过滤器?我宁愿不编辑任何一个宝石。
Ruby 不支持多重继承。我认为将过滤器提取到一个模块中并将它们混合是最干净的解决方案。
参见例如: http ://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html
设计还有另一个选项可用:config.parent_controller
. 它默认为ApplicationController
但可以更改为其他内容。就我而言(Rails API),我使用ApiController
. 在config/initializers/devise.rb
:
Devise.setup do |config|
# ... other configuration options
config.parent_controller = 'ApiController'
end