添加 route/action 到 ActiveAdmin 基本控制器之一?

Add a route/action to one of ActiveAdmin base controllers?

我有一个搜索收集操作,我希望它可以被 ActiveAdmin 中的所有资源控制器访问和覆盖。使用以下代码在单个 Active Admin 资源中创建控制器操作很简单:

collection_action :autocomplete_user_last_name, method: :get

  def autocomplete_user
    term  = params[:term]
    users = User.where('first_name LIKE ? OR last_name LIKE ? OR email LIKE ?', "%#{term}%", "%#{term}%", "%#{term}%").order(:first_name)
    render json: users.map { |user|
      {
        id:            user.id,
        label:         user.full_name,
        value:         user.full_name
      }
    }
  end

但是我如何在 ActiveAdmin 基本控制器中创建类似的操作?在 Rails、ApplicationController 中,我们可以在其中创建路由、操作、辅助方法等,其行为与任何其他控制器一样,但是,我只希望将此操作限定在 Active Admin 范围内,而不是我的整个应用程序. ActiveAdmin 中是否有与 ApplicationController 等效的东西?

查看AA代码,我发现以下基本控制器是所有资源控制器的超级类:

ActiveAdmin::PageController
ActiveAdmin::BaseController
ActiveAdmin::ResourceController

但是,collectionmember 操作未在这些 类 中定义。

我相信所有的 AA 资源控制器都继承自 `ActiveAdmin::ResourceController'。请在此处查看文档 Class: ActiveAdmin::ResourceController

我是靠记忆工作的,但我会先将您的控制器代码包装在 active_admin.rb 中,如下所示:

ActiveAdmin::ResourceController.class_eval do

  collection_action :autocomplete_user_last_name, method: :get do

    def autocomplete_user
      term  = params[:term]
      users = User.where('first_name LIKE ? OR last_name LIKE ? OR email LIKE ?', "%#{term}%", "%#{term}%", "%#{term}%").order(:first_name)
      render json: users.map { |user|
        {
          id:            user.id,
          label:         user.full_name,
          value:         user.full_name
        }
      }
    end
  end
end

我刚刚将 route/controller 操作的范围限定为特定资源。不确定 AA 的 API.

目前是否可以实现我的要求