0

我正在尝试实现 ActionController::Base 类的继承方法。我的目的是调用继承自 ActionController::Base 的类的方法,例如 ApplicationController,以使它们包含某些模块。目前我的代码如下所示:

module MyModule
 def inherited(child)
 end
 def my_test_method()
 end
end
ActionController::Base.send(:extend, MyModule)

ActionController::Base.methods.include? 'my_test_method'
=> true
ActionController::Base.methods.include? 'inherited'
=> false

该代码是从插件的初始化文件中调用的。

4

1 回答 1

0

继承是Class的一个类方法。当定义子类时,可以直接覆盖它以添加行为。我看不出如何通过扩展模块来做到这一点,但这应该会达到相同的结果:

class ActionController::Base
  def self.inherited(child)
    puts "child created: #{child}"
  end
end

class ChildClass < ActionController::Base
end

你会得到输出:

child created: ChildClass
于 2012-07-05T07:41:50.983 回答