Module: ActiveAdmin::AjaxFilter

Defined in:
lib/active_admin/ajax_filter.rb,
lib/active_admin/ajax_filter/engine.rb,
lib/active_admin/ajax_filter/version.rb

Defined Under Namespace

Classes: Engine

Constant Summary collapse

VERSION =
'0.5.0'

Class Method Summary collapse

Class Method Details

.included(dsl) ⇒ void

This method returns an undefined value.

Parameters:

  • dsl (ActiveAdmin::DSL)


14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
# File 'lib/active_admin/ajax_filter.rb', line 14

def included(dsl)
  dsl.instance_eval do
    collection_action :filter, method: :get do
      scope = find_collection(except: [:pagination, :collection_decorator])
        .order(params[:order])
        .limit(params[:limit] || 10)
        .distinct

      search_fields = Array(params[:searchFields])

      related_table_search_fields = search_fields
        .select { |f| f.include?('.') }
        .map { |f| f.split('.') }

      related_table_search_fields.each do |related_table, _|
        scope = scope.preload(related_table)
      end

      res = apply_collection_decorator(scope).map do |item|
        item_json = item.as_json

        related_table_search_fields.each do |related_table, search_field|
          item_json[related_table + '.' + search_field] = item.send(related_table).send(search_field)
        end

        item_json
      end

      render plain: res.to_json
    end
  end
end