自定义过滤器到活动管理员以在索引页面上提取多行

Custom filter to active admin to extract multiple rows on Index page

如果满足条件,我有一个工作代码可以过滤掉一行

  ransacker :custome_search, formatter: proc { |v|
    user = Util.new(param: v.strip).user. # gets the data from an external service
    id = user.present? ? user.id : nil
    id = id.presence
  } do |parent|
    parent.table[:id]
  end

我的索引页中有一个过滤器

  filter :custome_search, label: 'Custom Data Search:', filters: ['equals']

这项工作很好,但现在我必须更改它以适应多个元组 所以我将代码更改为

  ransacker :custome_search, formatter: proc { |v|
    users = Util.new(param: v.strip).find_users
    ids = users.present? ? users.pluck(:id)  : nil # now returns an array instead of just one id  [1,2,3]
    ids = ids.presence
  } do |parent|
    parent.table[:id]
  end

上面的代码显示零结果,因为内部形成的查询结果是

SELECT COUNT(*) FROM (SELECT  1 AS one FROM "users" WHERE "users"."id" = NULL LIMIT  OFFSET ) subquery_for_count /*controller:users,action:index*/  [["LIMIT", 30], ["OFFSET", 0]]

但是如果我做一个

ids=ids.first

同样会显示一行, 如何更改我的代码以在索引页上显示多行 我正在使用 active admin 2.0.0

搜查代码很好,我只需要更改索引页上的过滤器,任何这些都可以工作

  filter :custome_search, label: 'Custom Data Search:', filters: ['in']

  filter :custome_search_in, label: 'Custom Data Search:', as: :string