【问题标题】:How to include a mixin/module in ALL ActiveAdmin controllers?如何在所有 ActiveAdmin 控制器中包含 mixin/模块?
【发布时间】:2020-01-25 13:10:41
【问题描述】:

我编写了一个模块 - JsonLog - 它使用 Rails 提供的 append_info_to_payload 挂钩向日志记录工具添加一些自定义指标。我想在所有 ActiveAdmin 的控制器中包含/混合这个模块。

我已经尝试了以下方法,并且有效...

ActiveAdmin.register MyModel do
  controller do
    include JsonLog
  end
end

...但这将迫使我在我向 ActiveAdmin 注册的每个模型/控制器中编写样板代码。我如何在一个地方执行此操作(并且在此过程中还确保永远不会错过此样板文件)?

【问题讨论】:

  • 您没有可以继承所有其他控制器的基本控制器吗?如果没有,您可以轻松制作一个
  • ActiveAdmin 有我可以修改的基本控制器吗?这些不是我手写的控制器,而是由 ActiveAdmin 自动生成/管理的。

标签: ruby-on-rails ruby-on-rails-3 activeadmin


【解决方案1】:

不要害羞地阅读源代码。有一个ActiveAdmin::BaseController 继承自InheritedResources::Base,而InheritedResources::Base 又继承自您的ApplicationController。如果您确实需要专门修改ActiveAdmin::BaseController,请在config/initializers/active_admin.rb 中尝试:

ActiveAdmin::BaseController.class_eval do
  include JsonLog
end

【讨论】:

    猜你喜欢
    • 2017-12-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2023-03-10
    • 2015-11-25
    • 1970-01-01
    相关资源
    最近更新 更多