我有一个ActiveRecord
类Foo
,并且有一个ActiveAdmin索引视图列出了我的所有foo。
Foo
的范围为bland
,我的用户界面要求是我在过滤器部分中具有一个复选框,以便可以看到所有平淡的foos。
即,我希望过滤器部分如下所示:
我已经阅读了如下问题和博客,说我需要自定义洗劫者:
Use ActiveRecord scope in ActiveAdmin filter
所以我的代码是这样的:
ActiveAdmin.register Foo
filter :bland, label: 'Bland Foos', as: :check_boxes, collection: ['exclude tasty']
end
class Foo < ApplicationRecord
scope :bland, -> { where("tasty < 3") }
def self.ransackable_scopes(_auth_object = nil)
[:bland]
end
end
但是,当我尝试运行此程序时,出现类似以下错误:
#Ransack :: Search:0x00007f8d18e61db8的未定义方法`bland_in'
哎呀
作为一个实验,我尝试了如下操作:
ActiveAdmin.register Foo
filter :bland, label: 'Bland Foos'
end
class Foo < ApplicationRecord
scope :bland, -> (dummy_param_not_used) { where("tasty < 3") }
def self.ransackable_scopes(_auth_object = nil)
[:bland]
end
end
我的想法是:好的,ActiveAdmin将放置一个字符串输入,我们将填写一个值只是为了触发代码……但是,过滤器甚至没有显示在我的UI上!
答案 0 :(得分:0)
看看这是否有用。您可以根据需要更改UI元素。
ActiveAdmin.register Foo
......
scope :bland, -> { where("tasty < 3") }
......
end