Ruby on rails 多态筛选器集合:来自2个表的记录
在ActiveAdmin中,我想包括一个多态关联的过滤器,在我的例子中,它被称为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.
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