我有一个模块,它为ActionController :: Base添加了一些功能。我已将其包含在内,并且可用于某些事情。具体来说,UsersController.been_extended
返回true。如果我在UsersController中覆盖create,form_params
也可以。问题是,每当我尝试创建一个新用户时,它都说无法为UsersController找到动作创建。
module RailsExtender
module ActionControllerExtension
extend ActiveSupport::Concern
def create
@obj = do_create
# more stuff here
end
private
def form_params
fields = self.model.fieldset({ 'create' => 'new', 'update' => 'edit' }.fetch(params[:action], params[:action]))
params.require(self.model.to_s.to_sym).permit(*fields)
end
module ClassMethods
def been_extended # just for testing purposes
true
end
end
end
end
ActionController::Base.send(:include, ActionControllerExtension)
这是我的控制器,我试图调用create。
module Auth
class UsersController < ApplicationController
@model = User
end
end
为什么认为创造不存在?
答案 0 :(得分:1)
而不是像在这里一样将猴子修补到ActionController :: Base中:
ActionController::Base.send(:include, ActionControllerExtension)
将它混合到您的ApplicationController中,如下所示:
class ApplicationController < ActionController::Base
include ActionControllerExtension
# ...
end
我怀疑ActionController :: Base出于安全原因将所有自己的方法列入黑名单。只有ActionController :: Base的子类(即您的ApplicationController等)才能定义操作。