以下是在Rails 3.2.12中将动态方法添加到应用程序控制器的方法:
module WfHelper
extend ActiveSupport::Concern
included do
before_action :load_wf_action_def
end
protected
def load_wf_action_def
#load methods with eval()
end
end
在应用程序控制器中,包含模块wf_helper:
include WfHelper
load_wf_action_def
中定义的所有方法都可供应用程序控制器使用。但是,在升级到Rails 4.2.0之后,代码停止工作,应用程序控制器不再显示这些方法。调试显示base.before_action :load_wf_action_def
正常执行,但调用动态方法时,其方法未添加到控制器类action_methods
(AbstractController::ActionNotFound
)。问题来自action pack中的base.rb.我们不知道base.rb的确切变化导致代码被破坏了。是否有人为Rails 4的控制器添加了动态方法,并希望分享经验?
答案 0 :(得分:0)
我所做的是手动将操作添加到Controller.action_methods
,它解决了问题。