多态过滤器集合:来自2个表的记录

时间:2014-07-25 10:51:23

标签: ruby-on-rails activeadmin

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

这需要指定一个集合,但是 - 显然 - 记录来自多态关联中的多个模型我不确定如何组合来自多个表的记录。这显然是不正确的,但你得到了我想要做的事情:

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

任何想法都赞赏。

1 个答案:

答案 0 :(得分:1)

对于activeadmin< 1.0.0,看看https://github.com/activerecord-hackery/meta_search#multi-level-associations。在该部分的底部,它解释了如何处理多态关联。

对于activeadmin> = 1.0.0,请参阅有关how to do this using ransack

的此问题
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