在我的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
答案 0 :(得分:1)
默认情况下,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
答案 1 :(得分:-1)
而不是范围创建另一个过滤器,它将根据是删除示例还是全部来选择标准上的记录。并根据需要应用尽可能多的过滤器。
或者在计算将运行过滤器的选择器的过滤器中相应地运行范围,然后将过滤条件放在该选择器上。