Filter 使用基于聚合的动态过滤器筛选Rails 3模块

Filter 使用基于聚合的动态过滤器筛选Rails 3模块,filter,ruby-on-rails-3,aggregate,Filter,Ruby On Rails 3,Aggregate,我有一个模型,其中包括公司名称、发布日期、位置lat/lng对等属性。在索引视图中,我使用will_paginate gem分割结果集 我想包括基于查询结果的动态过滤器。例如,如果选择了老化桶,其他过滤器将基于此限制。理想情况下,我能够按频率对一些值进行排序。比如: Posted: [ 0 (24) | 30 (51) | 60 (45) | 90+ (555) ] Company: [ Company X (53) | Company AAA (44) | ... ] Locations:

我有一个模型,其中包括公司名称、发布日期、位置lat/lng对等属性。在索引视图中,我使用will_paginate gem分割结果集

我想包括基于查询结果的动态过滤器。例如,如果选择了老化桶,其他过滤器将基于此限制。理想情况下,我能够按频率对一些值进行排序。比如:

Posted: [ 0 (24) | 30 (51) | 60 (45) | 90+ (555) ]
Company: [ Company X (53) | Company AAA (44) | ... ] 
Locations: [ New York (100) | Paris (51) | ... ]
我曾考虑使用一个helper函数来根据结果的集合计算聚合,但会对gem的集合进行分页,例如@foos只包含当前页面的结果。也许有一种方法可以访问整个结果集


我想我可以执行一系列SQL语句来计算每个过滤器的频率值,但我希望有一种更有效的方法来实现这一点。

我在以下方法中取得了一些成功:

控制器:

...
# WHERE clause
@foos = @foos.posted(params[:posted]) if params[:posted].present?

# clone recordset
@companies = @foos.clone

# set ORDER BY / pagination
@foos = @foos.order_by(params[:sort], params[:dir]).paginate(:per_page => Foo.per_page, :page => params[:page])
...
视图:

也许有一种更有效的方法可以做到这一点

...
Company: [
<% @companies.group_by(&:company_name).sort.each do |company, foos| %>
    <%= "#company.name} (#{foos.length})" %> | 
<% end %>
]
...