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

时间:2021-05-10 20:33:12

标签: ruby-on-rails ruby-on-rails-5 activeadmin

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

  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 $1 OFFSET $2) subquery_for_count /*controller:users,action:index*/  [["LIMIT", 30], ["OFFSET", 0]]

但是如果我这样做

ids=ids.first

同样会显示一行, 如何更改我的代码以在索引页上显示多行 我正在使用活动管理员 2.0.0

1 个答案:

答案 0 :(得分:0)

好吧,洗劫代码很好,我只需要更改索引页面上的过滤器,其中任何一个都可以使用

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

  filter :custome_search_in, label: 'Custom Data Search:', as: :string
相关问题