如何使用ActiveAdmin(Formtastic)创建动态填充的选择(下拉)过滤器

时间:2014-08-28 10:25:14

标签: ruby-on-rails activeadmin formtastic

我正在开发基于Active Admin的Web应用程序,并且我正在尝试了解如何创建一个动态填充特定字段中所有唯一值的选择过滤器。

根据我的理解,Active Admin将Formtastic用于这些。

该方案是国家/地区,以下资源中的代码正常工作,并插入奥地利&法国进入选择。

但是我如何动态地,如何,如何查询所有可能的唯一国家/地区选项,并将它们插入此集合?

filter :Country, :as => :select, :collection => ["Austria", "France"]

我应该先在模型中完成这项工作,然后在资源中链接到它吗?

感谢您的帮助。

非常感谢。

编辑:根据评论,我现在尝试了这个,但这是错误的:

filter :Country2, :as => :select, :collection => proc { Country.all.collect {|country| country.name}.uniq }

Erorr消息:未初始化的常量国家/地区

FYI型号名称是Dailydeal

编辑2:

这是新的工作代码

filter :Country, :as => :select, :collection => proc { Dailydeal.all.collect {|dd| dd.Country}.uniq }

1 个答案:

答案 0 :(得分:4)

如果您有模型Country并想要过滤其所有对象名称,您可以执行以下操作:

filter :name, as: :select, collection: -> { Country.all.collect {|country| country.name}.uniq }

->是lambda的新语法。这将允许您仅加载当前存在的国家/地区名称。

使用常量的另一种方法(如果你有一些静态的国家/地区):

模特中的

COUNTRIES = ["Australia", "USA"] #whatsoever

然后在activeadmin中:

filter :name, as: :select, collection: -> { Country::COUNTRIES } 

修改

基于评论..

filter :country, as: :select, collection: -> { Dailydeal.all.collect {|dd| dd.country}.uniq }

更新

这个解决方案(使用pluck)据说效率更高:

filter :country, as: :select, collection: proc { Product.pluck(:country).uniq.sort }