【问题标题】:Monkey patch unpermitted_parameters in actioncontroller动作控制器中的猴子补丁 unpermitted_pa​​rameters
【发布时间】:2025-12-17 03:55:02
【问题描述】:

我正在浏览 rails 6 中的PR 之一,他们在其中向未允许的参数添加了颜色属性。我发现这对我的应用程序来说非常必要,因为我们通常有一个很长的日志。我想在我的 Rails 5 应用程序中包含相同的功能

我在我的应用程序中创建了一个 ext 文件夹,并在其中添加了以下代码

在初始化文件夹中

require "#{Rails.root}/app/ext/action_controller_override.rb"

文件名:action_controller_override.rb

ActionController::LogSubscriber.class_eval do

  def unpermitted_parameters(event)
      debug do
        unpermitted_keys = event.payload[:keys]
        color("Unpermitted parameter#{'s' if unpermitted_keys.size > 1}: #{unpermitted_keys.map { |e| ":#{e}" }.join(", ")}", RED)
      end
    end

end

但是上面的代码给了我错误。

无法记录 unpermitted_pa​​rameters.action_controller 事件。 NameError: 未初始化的常量 RED

那么,谁能解释一下,告诉我哪里出错了

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-5.2


    【解决方案1】:

    我建议将您的代码保存在 config/initializers 文件夹下作为 .rb 文件,该文件将根据您的代码打开类并覆盖。

    另外,看看3 ways to monkey patch

    【讨论】:

    • 我收到一个错误无法记录“unpermitted_pa​​rameters.action_controller”事件。 NameError: 未初始化的常量 RED
    • @AniketShivamTiwari 是的,我想您必须按照现有文件中的定义定义常量 RED。
    【解决方案2】:

    终于找到了解决办法

    "Unpermitted parameter#{'s' if unpermitted_keys.size > 1}: #{unpermitted_keys.map { |e| ":#{e}" }.join(", ")}".green
    

    关键字green由colorize gem给出

    【讨论】: