【问题标题】:Custom filter in ActiveAdmin using 2 level arrayActiveAdmin 中的自定义过滤器使用 2 级数组
【发布时间】:2015-08-20 17:01:10
【问题描述】:

目前我有一个带有过滤器的案例模型:

filter :specialty, as: :select, collection: Specialty.order(:category, :name)

过滤器下拉列表显示:

category1 - name1
category1 - General
category1 - name2
category2 - name1
category2 - name2
category2 - name3

:name 下有一个字符串General,我总是希望它位于按字母顺序排序的列表顶部。因此过滤器将始终按字母顺序显示:category,然后按字母顺序显示:name

我希望这个下拉菜单显示这个:

category1 - General
category1 - name1
category1 - name2
category2 - name1
category2 - name2
category2 - name3

我决定在 Case 模型中编写一个方法,以便我可以在 AA 过滤器中调用它,如下所示:

filter :specialty, as: :select, collection: Specialty.my_method

my_method 目前看起来像这样:

  def self.my_method
    groups = []

    category_list = Specialty.distinct(:category).pluck(:category, :name)

    category_list.sort_by! do |category, name|
      name == 'General' ? "#{category}, #{''}" : "#{category}, #{name}"
    end

    category_list.each do |category|
      groups << [category, Specialty.where(category: category).order('name')]
    end

    return groups
 end

问题是这将下拉菜单显示为数组而不是字符串,它看起来像这样:

["category1", "General"]
["category1", "name1"]
["category1", "name2"]
["category2", "name1"]
["category2", "name2"]
["category2", "name3"]

如何修改我的代码以使其正确显示? 洗劫和这个有关系吗?

【问题讨论】:

    标签: arrays ruby-on-rails-4 activeadmin activemodel ransack


    【解决方案1】:
    return groups.map{|group| group.join(" ")}
    

    【讨论】:

    • 谢谢,但不幸的是也没有返回正确的下拉菜单。它显示了一些奇怪的对象,并将它们各自特定类别下的所有名称分组为一个选择。
    【解决方案2】:

    原来是我想多了查询算法。这是使它返回正确数组的代码。

    def self.my_method
      all.sort_by do |specialty|
        specialty.name == 'General' ? [specialty.category, ''] :
        [specialty.category, specialty.name]
      end
    end
    

    下拉菜单现在显示:

    category1 - General
    category1 - name1
    category1 - name2
    category2 - name1
    category2 - name2
    category2 - name3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多