从多个控制器继承。

时间:2013-08-05 16:00:39

标签: ruby-on-rails ruby-on-rails-3 inheritance devise mixins

我使用Rails引擎作为cms。一切正常。我正在为此添加设计。

我生成的设计控制器继承自Devise :: SessionsController。但是有些过滤器是从引擎中的另一个控制器运行的,在这种情况下不会运行。很多站点依赖于运行这些过滤器。当然我可以复制它们,但那就是糟糕的juju。

所以我的问题是:如何让一个控制器从另一个控制器运行过滤器?我不想编辑任何一个宝石。

2 个答案:

答案 0 :(得分:3)

Devise还有另一种选择:config.parent_controller。它默认为ApplicationController,但可以更改为其他内容。就我而言(Rails API),我使用ApiController。在config/initializers/devise.rb

Devise.setup do |config| # ... other configuration options config.parent_controller = 'ApiController' end

答案 1 :(得分:2)

Ruby不支持多重继承。我认为将过滤器提取到模块中并将它们混合在一起将是最干净的解决方案。

参见例如: http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_modules.html