Ruby on Rails:按类别对搜索结果进行分组

时间:2013-11-19 06:23:56

标签: ruby-on-rails

我正在开发一个RoR WebApp。我正在尝试根据分类法在搜索页面上对结果进行分组。我想要做的是显示一个类别的标题,并列出该类别下的所有结果。类似的东西:

CAT 1
产品

CAT2
产品

CAT3

我正在尝试使用以下代码:

<% if products.any? %>               #products is the list of search results
  <%= render :partial=> 'product_listing_feature', :locals => {:scope => scope, :scope_type => scope_type} %>
  <div id="ql_product"></div>
  <div class="product_rows">
      <%taxons.each do |taxon|%>      # taxons contains the list of unique categories in products
        <div class = "product_row">
          <h1><%=taxon%></h1>
          <% taxonProducts = Array.new %>
          <% products.each do |product| %>
            <%@ptaxon = product.get_taxonomy%>
            <%if @ptaxon == taxon%>
              <% taxonProducts.push(product) %>
            <% end %>
          <% end %>
            <div class ="featured_product_list">
              <ul class = "featured_products">
                <div class = "page">
                  <%= render :partial=> 'product_listing', :locals=>{:collection=> taxonProducts} %>        
                </div>
              </ul>
            </div>
        </div>
      <% end %>
  </div>
<% end %>

令人惊讶的是,它从一个新行开始第二类,但以下类别出现混乱,类似

CAT1
产品

CAT2
产品 CAT3
         产品

This图片可以提供更好的主意。

我真的很惊讶为什么它只适用于一次迭代。有人可以帮我解决这个问题。 非常感谢

1 个答案:

答案 0 :(得分:3)

方式,视图的逻辑太多了。只需在控制器中使用group_by,即可为您提供名称与产品数组的映射:

products = Product.includes(:taxon).group_by { |p| p.taxon.name }