我正在尝试ActionController::Base
从 rails 4 引擎扩展,以便安装它的任何应用程序在每个操作之前运行特定方法。现在我知道可能有几种不同的方法可以做到这一点,比如关注点,class_eval
或者开放分类,但我对这一切都很陌生,我能找到的链接主要是关于如何从主应用程序扩展引擎控制器,而不是就像我正在尝试的那样。
这是我尝试过的,我在引擎的控制器文件夹中创建了一个新文件夹,如下所示:
my_engine
|-- app
|-- controllers
|-- action_controller
|-- base_controller.rb
|-- my_engine
|-- some_controller.rb
|-- other_controller.rb
并在base_controller.rb
我添加了以下内容:
require_dependency "action_controller/base"
module ActionController
class BaseController
before_action :some_method
private
def some_method
#just for testing
redirect_to 'http://www.google.com'
end
end
end
这不起作用。我认为这是因为它没有被加载(我仍在尝试了解如何以及在哪里将这样的自定义代码放置在 rails 引擎中),所以我尝试将该代码复制到my_engine/lib/my_engine/engine.rb
文件中,但随后出现以下错误启动服务器时:
undefined method `before_action' for ActionController::BaseController:Class (NoMethodError)
如何做到这一点,我应该在哪里正确放置文件?