【问题标题】:Add a route/action to one of ActiveAdmin base controllers?向 ActiveAdmin 基本控制器之一添加路由/操作?
【发布时间】:2016-04-02 00:22:38
【问题描述】:

我有一个搜索集合操作,我希望 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 操作并未在这些类中定义。

【问题讨论】:

    标签: ruby-on-rails ruby activeadmin


    【解决方案1】:

    我相信所有 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
    

    【讨论】:

    • 谢谢,我试过了。 collection_action 未在该上下文中定义。
    • 你是对的。 collection_action 在 AA DSL 中定义。我遇到了这个:viget.com/articles/8-insanely-useful-activeadmin-customizations,但还没有弄清楚如何将 collection_action 混合到模块中。
    • 感谢看到。我刚刚将路由/控制器操作范围限定为特定资源。不确定我所问的问题目前是否可以通过 AA 的 API 实现。
    【解决方案2】:

    我刚刚将路由/控制器操作范围限定为特定资源。不确定我所问的问题目前是否可以通过 AA 的 API 实现。

    【讨论】:

      猜你喜欢
      • 2014-02-04
      • 2011-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多