我在ActiveAdmin资源的索引视图上正在使用过滤器。
这是缩写的来源:
ActiveAdmin.register PendingCollege do
config.clear_action_items!
controller do
include Sendable
end
filter :name
menu :parent => "College"
actions :all, :except => [:destroy, :edit]
scope :all do
PendingCollege
end
scope :pending, default: true do
PendingCollege.pending
end
scope :rejected do
PendingCollege.rejected
end
scope :accepted do
PendingCollege.accepted
end
index do
column :id
column "Name", :name
column "IPEDS Number", :ipeds_number
column "Local id", :local_id
end
end
我看到的行为是过滤器按预期显示在右侧。当我选择“包含”并在框中输入字符串并单击过滤器按钮时,它将使用默认范围重新加载页面,但结果根本没有被过滤。
我验证了"q"=>{"name_contains"=>"Adrian"}
在控制器的参数中,但是正在运行的sql没有利用该参数。
我基本上添加了一个过滤器(而不是每个属性的默认过滤器),因为我不需要在此界面中公开大量的可搜索属性。
我看过很多代码示例,但没有发现需要添加额外代码来支持过滤器的任何内容。
答案 0 :(得分:0)
您应该定义如下范围:
scope :pending, default: true do |scope|
# given scope has all applied filters at this moment
scope.pending
end
在您的情况下,由于您的模型中具有相同名称的合并范围,因此您可以简单地这样做:
scope :all
scope :pending, default: true
scope :rejected
scope :accepted