【问题标题】:How to filter a boolean column on ActiveAdmin?如何过滤 ActiveAdmin 上的布尔列?
【发布时间】:2011-09-30 10:00:49
【问题描述】:

这个问题与ActiveAdmin gem 有关。我正在尝试过滤具有布尔类型但没有成功的列:filter :column_namefilter :column_name, :as => :boolean 不起作用。

有什么想法吗?

谢谢!

【问题讨论】:

    标签: ruby-on-rails-3 activeadmin


    【解决方案1】:

    filter :column_name, :as => :select 将创建一个下拉菜单,其中包含值“Any”、“True”、“False”

    【讨论】:

    • 您需要添加 collection 选项,否则如果记录集中的所有值都相同,则 (True/False) 值之一可能不存在。这样 ` :as => :select, 集合: [['True', true], ['False', false]] `
    【解决方案2】:

    从 ActiveAdmin 0.6.2 开始,使用 filter :column_name, as: :select 现在具有执行完整表扫描的可怕副作用。另外,它的选项现在是“Any”、“true”、“false”。

    例如,如果我有一个带有布尔列enabledDistrict 模型,那么filter :enabled, as: :select 会生成查询SELECT DISTINCT "districts"."enabled" FROM "districts" ORDER BY enabled asc 以获取这3 个值。我的区域表很大,所以这显然不是我想要的。

    OTOH,虽然我现在可以使用 filter :column_name, as: :boolean,但它使用了一个默认不被选中的复选框,这又不是我想要的。

    要恢复 0.6.2 之前的行为,我必须这样做:filter :enabled, as: :select, collection: [["Yes", true], ["No", false]]。 ActiveAdmin 为我放弃了“任何”值。

    【讨论】:

    • 使用 as: :select 和完整扫描的另一个副作用。如果没有字段,例如“false”值,则选择不包含“false”选项!
    【解决方案3】:

    同样,如果您需要使用复选框,请执行以下操作:

    filter :column_name, as: :check_boxes
    

    这将创建名称为YesNo 的复选框,其值分别为truefalse

    如果您想自定义名称,甚至是标签?然后做:

    filter :column_name, label: "Custom Column Name", as: :check_boxes, collection: [["Paid", true], ["Not paid", false]]
    

    虽然您可以使用复选框(它有效!),但我建议使用as::select,因为它会在页面刷新后“记住”所选值(在 UI 上)。自 activeadmin 版本 1.2.1 起,复选框尚无此功能

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-01-26
      • 2020-05-15
      • 2011-02-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多