在 Active Admin 中自定义排序或排序,使用在 has_many 到 has_many 多态关联中的位置,可以通过使用 order_by
方法来实现。
假设我们有两个模型 Category
和 Product
,并且它们之间有一个多态关联 has_many :products, as: :categorizable
。我们想要在 Active Admin 中对 Category
模型的产品进行排序。
首先,我们需要在 Active Admin 的 Category
资源中定义排序规则。我们可以在 app/admin/category.rb
文件中添加以下代码:
ActiveAdmin.register Category do
controller do
def scoped_collection
super.includes(:products)
end
end
index do
column :name
column :product_count do |category|
category.products.size
end
column :created_at
column :updated_at
end
# 自定义排序规则
config.sort_order = 'product_count_desc'
# 在 has_many 关联中定义排序位置
has_many :products, as: :categorizable do
sortable_tree_member_actions
end
end
在上述代码中,我们首先通过 scoped_collection
方法包含了 products
关联,这样我们就可以在排序规则中使用它。然后,我们在索引页面中添加了一个 :product_count
列,该列显示每个类别的产品数量。接下来,我们通过 config.sort_order
自定义了排序规则,以 product_count_desc
(根据产品数量降序)来排序。最后,在 has_many
关联中使用 sortable_tree_member_actions
方法来启用拖放排序功能。
这样,我们就可以在 Active Admin 中按照产品数量对类别进行排序了。