Однажды я заметил, что доступ к некоторым страницам 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