在ActiveAdmin过滤器中使用ActiveRecord范围-仅在选中时应用过滤器

时间:2019-11-22 19:23:02

标签: ruby-on-rails activeadmin ransack

我有一个ActiveRecordFoo,并且有一个ActiveAdmin索引视图列出了我的所有foo。  Foo的范围为bland,我的用户界面要求是我在过滤器部分中具有一个复选框,以便可以看到所有平淡的foos。

即,我希望过滤器部分如下所示:

enter image description here

我已经阅读了如下问题和博客,说我需要自定义洗劫者:

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上!

1 个答案:

答案 0 :(得分:0)

看看这是否有用。您可以根据需要更改UI元素。

ActiveAdmin.register Foo
  ......
  scope :bland, -> { where("tasty < 3") }
  ......
end

参考:ActiveAdmin Documentation