Ruby on rails 多态筛选器集合:来自2个表的记录

Ruby on rails 多态筛选器集合:来自2个表的记录,ruby-on-rails,activeadmin,Ruby On Rails,Activeadmin,在ActiveAdmin中,我想包括一个多态关联的过滤器,在我的例子中,它被称为enterable 这需要指定一个集合,但由于(显然)记录来自多态关联中的多个模型,我不确定如何组合来自多个表的记录。这显然是不正确的,但你明白我的意思: filter :enterable, collection: [Award.all,Challenge.all], label: "Award/Challenge" 欢迎提出任何想法。对于activeadmin=1.0.0,请参见此问题 ActiveAdmin.

在ActiveAdmin中,我想包括一个多态关联的过滤器,在我的例子中,它被称为
enterable

这需要指定一个集合,但由于(显然)记录来自多态关联中的多个模型,我不确定如何组合来自多个表的记录。这显然是不正确的,但你明白我的意思:

filter :enterable, collection: [Award.all,Challenge.all], label: "Award/Challenge"

欢迎提出任何想法。

对于activeadmin<1.0.0,请查看。在该部分的底部,它解释了如何处理多态关联

对于activeadmin>=1.0.0,请参见此问题

ActiveAdmin.register条目do
#对于activeadmin<1.0.0,它使用元搜索
过滤器:可输入的\u奖励\u类型\u标题\u或\u可输入的\u挑战\u类型\u标题
#对于activeadmin>=1.0.0,它使用ransack
过滤器:可输入的\u奖励\u类型\u标题\u或可输入的\u挑战\u类型\u标题
#构建这个长名称的更具程序性的方法是:
过滤器([奖励,挑战]。收集do |可输入|
“可输入的标题{enterable.to_s}
结束。将(“\u或“)”连接到\u符号
结束

谢谢-我已经在我的模型中添加了搜索方法等
条目
,但是我得到了
未定义的方法“搜索方法”
我哪里出错了?我已经完全更新了我的答案。我想你使用的是activeadmin>=1.0.0,我最初的答案是针对旧版本的。非常感谢你的帮助,但是使用
过滤器:可输入的\u奖励\u类型\u标题\u或可输入的\u挑战\u类型\u标题
(标题在两个型号之间共享)过滤器不会出现,编程版本导致此错误:
未定义的方法“to#sym”for#
(将
列名称
更改为
:title
后,我在编程方法中添加了一些参数来解决该错误。但我怀疑您会得到相同的结果——它所做的只是构造您已经尝试过的同一个符号。恐怕这也不起作用
语法错误,意外的关键字\u do\u block,预期')“
非常感谢您的帮助。
ActiveAdmin.register Entry do
  # For activeadmin < 1.0.0 , which uses meta_search
  filter :enterable_award_type_title_or_enterable_challenge_type_title

  # For activeadmin >= 1.0.0 , which uses ransack
  filter :enterable_of_Award_type_title_or_enterable_of_Challenge_type_title

  # A more programmatic approach to building this long name would be:
  filter ([Award, Challenge].collect do |enterable| 
    "enterable_of_#{enterable.to_s}_type_title" 
  end.join("_or_")).to_sym
end