如何在ActiveAdmin中实现自定义过滤?它应该基于ActiveRecord条件。
E.g。我有2个型号:产品和类别
class Product < ActiveRecord::Base
belongs_to :category
scope :in_category, ->(category_id) { where(category_id: Category.find(category_id).descendants.pluck(:id)) }
end
class Category < ActiveRecord::Base
has_many :products
acts_as_nested_set
end
ActiveAdmin.register Product do
filter :category
end
类别是分层的。
当我在过滤器中输入类别时,我应该看到该类别的所有产品及其后代类别(产品型号中的in_category范围)。
现在,ActiveAdmin使用ransack而不是元搜索,而最老的方法不起作用。
答案 0 :(得分:1)
我的例子的解决方案。
在产品型号中:
ransacker :containing_category,
:formatter => ->(v) { ids = Category.find(v).self_and_descendants.pluck(:id);
ids.present? ? ids : nil } do |product|
product.table[:category_id]
end
过滤器:
filter :containing_category_in,
as: :select,
label: 'Category',
collection: Category.all