ruby 如何在所有活动管理页面控制器中自动包含关注点?

ztyzrc3y  于 2023-03-01  发布在  Ruby
关注(0)|答案(1)|浏览(146)

我有以下关注:

  • ./应用程序/控制器/关注点/活动助手. rb *
module ActivityHelper
  extend ActiveSupport::Concern

  included do
    before_action :my_method, except: %i[update destroy]
  end

  def my_method
    ...
  end
end

目前,我包括在几个主动管理页面控制器手动这样的关注:

  • ./应用程序/管理员/ Jmeter 板. rb *
controller do
  include ActivityHelper
end

我已经尝试了以下操作,但它无法正常工作而不出现任何错误
1.我在 *./app/controllers/concerns/active_admin_controller_concerns. rb * 中创建了一个新模块:

module ActiveAdminControllerConcern
   extend ActiveSupport::Concern

   included do
       controller do
          include ActivityHelper
       end
   end
end

1.我在 *./config/initializers/active_admin. rb * 中添加了以下方法和配置:
一个三个三个一个
如何在所有活动管理页面控制器中自动只包含模块ActivityHelper?

wn9m85ua

wn9m85ua1#

要在所有活动管理页面控制器中自动包含模块ActivityHelper,可以在ActiveAdminControllerConcern模块中使用ActiveSupport.on_load方法。以下是修改代码的方法:

# ./app/controllers/concerns/active_admin_controller_concern.rb
module ActiveAdminControllerConcern
  extend ActiveSupport::Concern

  included do
    ActiveSupport.on_load(:active_admin_controller) do
      include ActivityHelper
    end
  end
end

在此更新模块中,ActiveSupport.on_load方法用于将ActivityHelper模块添加到active_admin_controller加载挂钩。这将确保ActivityHelper包含在所有Active Admin页面控制器中,而无需手动包含它。
然后,您可以将以下方法添加到./config/initializers/active_admin.rb文件中,以加载ActiveAdminControllerConcern模块:

# ./config/initializers/active_admin.rb 

def add_active_admin_controller_concern   
  ActiveAdmin::ResourceController.send(:include, ActiveAdminControllerConcern)
end 

ActiveAdmin.setup do |config|   
  config.before_action :add_active_admin_controller_concern
end

在这个更新的方法中,使用ActiveAdmin::ResourceController类而不是ActiveAdmin::ResourceDSL,因为我们希望将ActiveAdminControllerConcern模块包含在控制器类本身中,而不是包含在用于定义资源的DSL中。
通过这些更改,ActivityHelper模块现在应该自动包含在所有Active Admin页面控制器中。

相关问题