ActiveAdmin – 将范围与filter一起使用

在我的ActiveAdmin模型中,我有一个自定义范围来显示已删除的记录和几个用于按特定列搜索记录的filter。

单独使用filter或组合使用filter可按预期工作。

使用范围按预期工作。

问题是使用范围似乎会覆盖所有filter,并且在选择范围后,添加的任何filter都不会做任何事情。

这里有人有什么想法吗? 我想要的是能够显示特定的范围,然后仍然能够过滤该范围内的结果。

ActiveAdmin.register Example do scope :deleted do |example| Example.only_deleted end scope :all do |example| Example.with_deleted end filter :title filter :description index do column :title column :description end end 

[更新]

这是我一直在使用的解决方案。 我在模型上设置了with_deleted范围,并在侧面包含filter以显示/隐藏已删除的结果。 不理想,因为最初删除的结果也会显示,但至少所有filter可以一起使用。

  ActiveAdmin.register Example.with_deleted do filter :title filter :description filter :deleted, :as => :select, :collection => {:true => nil, :false => false } index do column :title column :description end end 

而不是范围创建另一个filter,该filter将根据是删除示例还是全部来选择标准上的记录。 并根据需要应用尽可能多的filter。

或者在计算将运行filter的选择器的filter中相应地运行范围,然后将过滤条件放在该选择器上。

默认情况下,ActiveAdmin希望范围仅提供符号化方法名称。 当您以这种方式定义范围时,它们可以链接到filter已经提供的范围,并且它们可以无缝地协同工作。

因此,您的错误是显式调用Model#class_method而不是提供:symbolized_class_method_name (具有当前模型的隐含所有者)。

如果替换此代码,filter和范围将一起使用:

 scope :all do |example| Example.with_deleted end scope :deleted do |example| Example.only_deleted end 

有了这个:

 scope "Deleted", :only_deleted scope "All", :with_deleted