我的模型包含company_name,posted(日期),location(lat / lng对)等属性。在Index视图中,我使用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) | ... ]
我考虑过使用辅助函数根据结果集合计算聚合,但是will_paginate gem的集合(例如@foos)只包含当前页面的结果。也许有办法访问整个结果集。
我想我可以执行一系列SQL语句来计算每个过滤器的频率值,但我希望有一种更有效的方法可以做到这一点。
答案 0 :(得分:0)
我在以下方法上取得了一些成功:
控制器:
...
# 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 %>
]
...
也许有一种DRYer /更有效的方法来做到这一点。