簡體   English   中英

ActiveAdmin中的自定義過濾器

[英]Custom filter in ActiveAdmin

如何在ActiveAdmin中實現自定義過濾? 它應基於ActiveRecord條件。

例如,我有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代替元搜索,並且最舊的方法不起作用。

我的示例的解決方案。

在產品型號中:

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

以下是本文介紹如何在ActiveAdmin中的索引頁上創建自定義列以及如何基於Ransack添加自定義過濾器:

http://codeonhill.com/activeadmin-custom-column-and-its-filter/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM