活动管理员 - 将作用域与筛选器结合使用



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

单独使用筛选器或组合在一起按预期工作。

使用范围按预期工作。

问题在于,使用范围似乎会覆盖所有筛选器,并且在选择范围后,添加的任何筛选器都不会执行任何操作。

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

    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范围,并在侧面包含过滤器以显示/隐藏已删除的结果。不理想,因为还会显示最初删除的结果,但至少所有过滤器可以一起使用。

    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

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

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

如果替换此代码,筛选器和范围将协同工作:

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

有了这个:

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

范围创建另一个过滤器,该过滤器将根据是否删除示例或全部选择标准记录。并根据需要应用任意数量的过滤器。

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

最新更新