Custom Filter в Active Admin — Частина 1

Active admin (ActiveAdmin) — це мій улюблений плагін для створення адміністративного інтерфейсу за допомогою Ruby on Rails.

Він значно полегшує життя розробникам. Використовуючи Active Admin, ми можемо розробляти елегантні та надійні додатки з меншим обсягом коду.

Як відомо, AA надає вбудовану функціональність фільтрів. Найскладніша частина — це створення користувацьких фільтрів, якщо у вас є вкладені або поліморфні асоціації. Є різні способи досягти цього.

Припустимо, ви хочете дозволити адміністратору залишати коментарі до продуктів. Використовуючи activeadmincomments, ви зможете це зробити. Я не буду заглиблюватися в деталі, оскільки нашою метою є створення користувацького фільтра для поліморфних асоціацій.

Active Admin створює поліморфну асоціацію з моделлю і посилається на неї як на ресурс.

_class_ Delivery < ApplicationRecord# Should return products that have comments scope :product_list, ->{ where('products.id in (?)', Comment.where(resource_type: 'Product').pluck(:resource_id) }end

Код фільтра потрібно додати у файл app/admin/activeadmincomments.rb.

filter :resource_of_Product_type_id, label: ‘Product Name’, as: :select, collection: proc { Product.product_list }

У наведеному прикладі resource — це назва стовпця в таблиці activeadmincomments, оскільки ми звертаємось до моделі, яка мапується через ресурс. Product — це назва моделі, а id — стовпець, до якого ми хочемо застосувати умову.

Інший приклад:

filter :resource_of_Product_type_category_id, label: 'Category Name', as: :select, collection: proc { Product.by_category_id }

Цей фільтр буде фільтрувати коментарі на основі категорії продукту.

У частині II ми обговоримо, як застосувати фільтри для вкладених відносин.

Перекладено з: Custom Filter in Active Admin — Part 1