Однажды я заметил, что доступ к некоторым страницам ActiveAdmin приводил к падению рабочего сервера. Я был удивлен. Проблема заключалась в том, что ActiveAdmin может легко выполнить запросы N+1. Ассоциации выбора фильтра также загружают все записи из базы данных, что явно может привести к проблемам.

TL;DR — Предварительно загрузите ассоциации на индексных страницах, выполнив следующие действия:

ActiveAdmin.register Model do
  controller do 
    def scoped_collection
      super.includes(association: :nested_association)
           .includes(:another_association)
    end
  end
end

Следуйте подходу https://www.rootstrap.com/blog/how-to-customize-the-display-name-of-dynamic-activeadmin-search-filters/, чтобы добавить файл app/views/admin/model/index.json.jbuilder и убедиться, что автоматически генерируется Конечная точка AJAX ActiveAdmin возвращает нужный вам JSON.

Также удалите активные ассоциации, выберите фильтры и добавьте вместо них ленивые:

# app/admin/children.rb
ActiveAdmin.register Child do
  preserve_default_filters!
  remove_filter :parent, :grand_parent # remove original filter
  # this name must contain the relationships path from the 
  # model from the index page until the user table, so 
  # child -> parent -> user. the engine will do a join.
  filter :parent_grand_parent_id, 
    label: "GrandParent",
    as: :search_select_filter,
    url: proc { admin_grand_parents_path }, # AJAX endpoint
    fields: %w[name a_column another_column], # columns in the looked up table to be compared against
    minimum_input_length: 2,
    method_model: User, # original table
    width: "190px", # necessary for fixing a UI bug
    display_name: "customized_display_name", # custom display name that gives you more flexibility to use whatever you want, must be included in the app/views/admin/child/index.json.jbuilder file
    order_by: "name"
end