ActiveAdmin:按子对象的计数进行筛选

时间:2014-12-26 23:29:40

标签: ruby-on-rails ruby filter activeadmin ransack

在一个严重依赖ActiveAdmin的Ruby on Rails应用程序中,我有一个赞助商模型,它与赞助模型相关联。一个sponsor可以赞助许多孩子,因此一个sponsor可以有多个sponsorships

我想做的是,能够在赞助商索引页面上按赞助商数量过滤赞助商。因此,举例来说,我只希望看到那些拥有多个赞助商或少于五个赞助商的赞助商,依此类推。你明白了。在Ruby中,我想要一个过滤器,它可以做以下几行:

Sponsor.all.select { |sp| sp.sponsorships.count > 1 }

我发现它实际上很难做到。默认的ActiveAdmin过滤器处理特定模型(或其子模型)的属性,而不是自定义方法,而我需要通过自定义方法精确过滤。所以这是ActiveAdmin的组合视图/控制器sponsor.rb文件中的过滤器:

filter :sponsorships_count, label: 'Sponsorships', as: :numeric

其中:sponsorships_count不是赞助商模型的属性。

我尝试使用Ransacker(似乎some people have had success with it),但无法找出正确的语法。其他人有幸将过滤器指定为自定义(使用as: custom语法,例如here,并提供模型范围的名称作为过滤器名称),但这对我来说并不适合(应用程序)正在使用ActiveAdmin版本1.0.0.pre,据报道不能使用此方法。

帮助,有人吗?

0 个答案:

没有答案