有没有办法迭代Datagrid Filter Rails?

问题描述 投票:0回答:1

我一直在学习实现一个小型的 ROR 系统,并使用强大的 Datagrid gem 来过滤、排序、导出数据等。

今天,我一直在尝试基于子对象迭代过滤器。 让我们说: - 我有一个主要的客户端对象,我进行过滤 - 客户拥有并属于许多产品 - 产品拥有并属于许多客户 - 产品所属类别

就我而言: - A 类有 3 个产品 P1、P2、P3 - B类有2种产品P4、P5 - 客户有 5 个产品 P1、P2、P3、P4 和 P5

目前,我只能实现一个产品过滤器,我可以检索客户使用的所有产品。

买我想要的就是按类别拆分产品。因此,它应该有两个类别过滤器。问题是迭代不能在 Datagrid 类中使用。

我想知道是否有类似的方法:

Category.all.each do |category|
    filter(:category_name, :enum, ...) do |scope|
        ...
    end
end
ruby-on-rails ruby datagrid
1个回答
0
投票

您可以使用

dynamic
方法来实现,该方法允许在运行时动态生成列和过滤器:

class ClientGrid
  include Datagrid

  scope do
    Client.all
  end

  dynamic do
    Category.all.each do |category|
      filter("#{category.name.underscore}_product_id", :enum, 
           select: -> { category.products.pluck(:name, :id) }) do |scope, id|
        scope.joins(:products).where(products: { id: id, category_id: category.id })
      end
    end
  end
end
© www.soinside.com 2019 - 2024. All rights reserved.