ActiveAdmin 过滤器 - 查找所有带有空白字段的过滤器

ActiveAdmin filters- find all with a blank field

我有一个针对用户的 ActiveAdmin 过滤器菜单,其中列出了很多这样的菜单:

filter :id
filter :full_name
filter :age
filter :supervisor, collection: Supervisors.all

我想查询主管字段设置为零的所有用户。我该怎么做?

filter 本身不允许您搜索空白,我认为您必须通过向用户模型添加一个掠夺者来解决:

ransacker :by_supervisor, formatter: proc{ |v|
  v=nil if v==0
  data = User.where(supervisor: v).ids
  data = data.present? ? data : nil
} do |parent|
  parent.table[:id]
end

并且在 ActiveAdmin 模块中而不是普通过滤器

filter :supervisor, collection: [Supervisor.new(id: 0, name: 'None'), Supervisor.all].flatten

这提供了一个 id=0 的 Supervisor 来允许搜索 "no supervisors",id=0 被掠夺者变成了 nil